From e4c511d403f09769210927432035aa14072cda92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guilloux?= Date: Fri, 7 Apr 2023 19:33:07 +0200 Subject: [PATCH 01/18] Fix #10578: Allow to select any version of AI/GS from GUI (#10604) --- src/ai/ai_gui.cpp | 4 ++-- src/game/game_gui.cpp | 4 ++-- src/lang/english.txt | 3 ++- src/script/script_gui.cpp | 24 +++++++++++++++--------- src/script/script_gui.h | 2 +- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index da60bb9f98..c93358828e 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -194,7 +194,7 @@ struct AIConfigWindow : public Window { case WID_AIC_LIST: { // Select a slot this->selected_slot = (CompanyID)this->vscroll->GetScrolledRowFromWidget(pt.y, this, widget); this->InvalidateData(); - if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowScriptListWindow((CompanyID)this->selected_slot); + if (click_count > 1 && this->selected_slot != INVALID_COMPANY) ShowScriptListWindow((CompanyID)this->selected_slot, _ctrl_pressed); break; } @@ -217,7 +217,7 @@ struct AIConfigWindow : public Window { break; case WID_AIC_CHANGE: // choose other AI - ShowScriptListWindow((CompanyID)this->selected_slot); + ShowScriptListWindow((CompanyID)this->selected_slot, _ctrl_pressed); break; case WID_AIC_CONFIGURE: // change the settings for an AI diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index 566a219b20..cdac18e94c 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -249,12 +249,12 @@ struct GSConfigWindow : public Window { switch (widget) { case WID_GSC_GSLIST: { this->InvalidateData(); - if (click_count > 1 && _game_mode != GM_NORMAL) ShowScriptListWindow((CompanyID)OWNER_DEITY); + if (click_count > 1 && _game_mode != GM_NORMAL) ShowScriptListWindow((CompanyID)OWNER_DEITY, _ctrl_pressed); break; } case WID_GSC_CHANGE: // choose other Game Script - ShowScriptListWindow((CompanyID)OWNER_DEITY); + ShowScriptListWindow((CompanyID)OWNER_DEITY, _ctrl_pressed); break; case WID_GSC_CONTENT_DOWNLOAD: diff --git a/src/lang/english.txt b/src/lang/english.txt index 80c9dd9e3f..a0aec4db7b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4584,6 +4584,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs STR_AI_CONFIG_HUMAN_PLAYER :Human player STR_AI_CONFIG_RANDOM_AI :Random AI STR_AI_CONFIG_NONE :(none) +STR_AI_CONFIG_NAME_VERSION :{RAW_STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maximum no. competitors: {ORANGE}{COMMA} STR_AI_CONFIG_MOVE_UP :{BLACK}Move Up @@ -4597,7 +4598,7 @@ STR_AI_CONFIG_AI :{SILVER}AIs STR_AI_CONFIG_CHANGE_AI :{BLACK}Select AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Select Game Script -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script. Ctrl+Click to show all available versions STR_AI_CONFIG_CONFIGURE :{BLACK}Configure STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configure the parameters of the Script diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 1a1bca2822..78f34f7646 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -54,19 +54,21 @@ struct ScriptListWindow : public Window { CompanyID slot; ///< The company we're selecting a new Script for. int line_height; ///< Height of a row in the matrix widget. Scrollbar *vscroll; ///< Cache of the vertical scrollbar. + bool show_all; ///< Whether to show all available versions. /** * Constructor for the window. * @param desc The description of the 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) : Window(desc), - slot(slot) + ScriptListWindow(WindowDesc *desc, CompanyID slot, bool show_all) : Window(desc), + slot(slot), show_all(show_all) { if (slot == OWNER_DEITY) { - this->info_list = Game::GetUniqueInfoList(); + this->info_list = this->show_all ? Game::GetInfoList() : Game::GetUniqueInfoList(); } else { - this->info_list = AI::GetUniqueInfoList(); + this->info_list = this->show_all ? AI::GetInfoList() : AI::GetUniqueInfoList(); } this->CreateNestedTree(); @@ -120,11 +122,14 @@ struct ScriptListWindow : public Window { DrawString(tr, this->slot == OWNER_DEITY ? STR_AI_CONFIG_NONE : STR_AI_CONFIG_RANDOM_AI, this->selected == -1 ? TC_WHITE : TC_ORANGE); tr.top += this->line_height; } + StringID str = this->show_all ? STR_AI_CONFIG_NAME_VERSION : STR_JUST_RAW_STRING; int i = 0; for (const auto &item : *this->info_list) { i++; if (this->vscroll->IsVisible(i)) { - DrawString(tr, item.second->GetName(), (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); + SetDParamStr(0, item.second->GetName()); + SetDParam(1, item.second->GetVersion()); + DrawString(tr, str, (this->selected == i - 1) ? TC_WHITE : TC_ORANGE); tr.top += this->line_height; } } @@ -262,13 +267,14 @@ static WindowDesc _script_list_desc( ); /** - * Open the AI list window to chose an AI for the given company slot. - * @param slot The slot to change the AI of. + * Open the Script list window to chose a script for the given company slot. + * @param slot The slot to change the script of. + * @param show_all Whether to show all available versions. */ -void ShowScriptListWindow(CompanyID slot) +void ShowScriptListWindow(CompanyID slot, bool show_all) { CloseWindowByClass(WC_SCRIPT_LIST); - new ScriptListWindow(&_script_list_desc, slot); + new ScriptListWindow(&_script_list_desc, slot, show_all); } diff --git a/src/script/script_gui.h b/src/script/script_gui.h index d892feef3a..1775d52489 100644 --- a/src/script/script_gui.h +++ b/src/script/script_gui.h @@ -13,7 +13,7 @@ #include "../company_type.h" #include "../textfile_type.h" -void ShowScriptListWindow(CompanyID slot); +void ShowScriptListWindow(CompanyID slot, bool show_all); Window *ShowScriptDebugWindow(CompanyID show_company = INVALID_COMPANY); void ShowScriptSettingsWindow(CompanyID slot); void ShowScriptTextfileWindow(TextfileType file_type, CompanyID slot); From 9246789fd3eaa76791290deef4405aba8e6dcaa8 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 7 Apr 2023 18:39:12 +0000 Subject: [PATCH 02/18] Update: Translations from eints spanish (mexican): 2 changes by GNosii vietnamese: 2 changes by KhoiCanDev czech: 1 change by jachymozo romanian: 10 changes by bnegrut danish: 3 changes by bscargo --- src/lang/czech.txt | 1 + src/lang/danish.txt | 6 +++--- src/lang/romanian.txt | 10 ++++++++++ src/lang/spanish_MX.txt | 2 ++ src/lang/vietnamese.txt | 2 ++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 93600de2f4..56adf604c9 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -2445,6 +2445,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nová společn STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Vytvořit novou společnost a připojit se do ní STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tohle jsi ty STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Toto je hostitel hry +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" i i} - {NUM}/{NUM} společnost{P “” i i} STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Počet momentálně připojených hráčů, počet společností a maximální počet společností povolený administrátorem serveru # Matches ConnectionType diff --git a/src/lang/danish.txt b/src/lang/danish.txt index c0d41d8b49..d609b52a11 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1236,7 +1236,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Konstruktionspr STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Indstil prisniveau for køb og konstruktion STR_CONFIG_SETTING_RECESSIONS :Kriser: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Lavkonjunkturer forekomme hvert 5. år hvis denne indstilling er slået til. Ved lavkonjunktur falder produktionen markant (produktionen returnerer til tidligere niveau når lavkonjunkturen er ovre) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Hvis aktiveret, kan lavkonjunktur forekomme hvert par år. Under en lavkonjunktur er al produktion væsentligt lavere (den vender tilbage til tidligere niveau, når recessionen er forbi) STR_CONFIG_SETTING_TRAIN_REVERSING :Forbyd toge at køre baglængs i stationer: {STRING} STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Hvis aktiveret, vil tog ikke vende på stationer der ikke er endestationer, også selvom der er en kortere rute til deres næste destination ved at vende @@ -3644,7 +3644,7 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Forhindr # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrer skærmen over vejpunktets lokalitet. Ctrl+Klik åbner et nyt vindue ved rutepunktets lokalitet. +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Centrer skærmen over rutepunktets lokalitet. Ctrl+Klik åbner et nyt vindue ved rutepunktets lokalitet. STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Omdøb rutepunkt STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Centrér skærmen ved bøjens placering. Ctrl+klik åbner et nyt vindue ved bøjens placering STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Ændre navnet på bøjen @@ -3973,7 +3973,7 @@ STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Vis ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Toggle skjule / vise af tog type STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Toggle skjule / vise af kørtøjstype -STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Toggle skjule / vise af skibstype +STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Skift skjul/visning af skibstypen STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Toggle skjule / vise af flytype ###length VEHICLE_TYPES diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 36b2f63fa8..5c733f5d99 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -2358,6 +2358,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Companie nouă STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Creează o nouă companie și intră în ea STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Aici ești tu STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Aceasta este gazda jocului +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Numărul de clienți conectați în prezent, numărul de companii și numărul maxim de companii permis de administratorul serverului # Matches ConnectionType ###length 5 @@ -5084,7 +5085,16 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... prea STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... avionul nu are o rază de acțiune suficientă # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_RAIL_STATION :{WHITE}Nu există nicio gară +STR_ERROR_NO_BUS_STATION :{WHITE}Nu există stație de autobuz +STR_ERROR_NO_TRUCK_STATION :{WHITE}Nu există stație de camion +STR_ERROR_NO_DOCK :{WHITE}Nu există doc +STR_ERROR_NO_AIRPORT :{WHITE}Nu există aeroport/heliport +STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Nu există opriri cu un tip de drum compatibil +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Nu există stații cu un tip de tramvai compatibil STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Nu există opriri care să fie potrivite pentru vehiculele rutiere articulate.{}Vehiculele rutiere articulate necesită o oprire de drum, nu o oprire într-o rampă. +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Acest avion nu poate ateriza la acest heliport +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Acest elicopter nu poate ateriza pe acest aeroport STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Nu există niciun punct intermediar feroviar STR_ERROR_NO_BUOY :{WHITE}Nu există geamanduri diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 0b2061a0d1..113d2dcf6c 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -5082,6 +5082,8 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... dema STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... la aeronave no tiene suficiente alcance # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_BUS_STATION :{WHITE}No hay una estación de autobus +STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}No hay paradas con un tipo de tramo compatible # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}No se pueden asignar itinerarios al vehículo... diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 9d4cd51a8b..7b490dde35 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -5086,7 +5086,9 @@ STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... quá STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... máy bay không đủ tầm xa # Extra messages which go on the third line of errors, explaining why orders failed +STR_ERROR_NO_RAIL_STATION :{WHITE}Không có ga xe lửa STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Không thể hạ cánh trực thăng ở sân bay này +STR_ERROR_NO_BUOY :{WHITE}Không có cái phao nào # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Không thể lập lịch trình cho phương tiện... From 04215afe3ff412e3a90fc802550d86d8f9a5c0c4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Apr 2023 20:29:52 +0100 Subject: [PATCH 03/18] Codechange: Replace roadstop spec limit magic number with constant. --- src/newgrf.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index b0fb95c30f..55746aa263 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -4793,12 +4793,12 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR { ChangeInfoResult ret = CIR_SUCCESS; - if (id + numinfo > 255) { - grfmsg(1, "RoadStopChangeInfo: RoadStop %u is invalid, max %u, ignoring", id + numinfo, 255); + if (id + numinfo > NUM_ROADSTOPS_PER_GRF) { + grfmsg(1, "RoadStopChangeInfo: RoadStop %u is invalid, max %u, ignoring", id + numinfo, NUM_ROADSTOPS_PER_GRF); return CIR_INVALID_ID; } - if (_cur.grffile->roadstops == nullptr) _cur.grffile->roadstops = CallocT(255); + if (_cur.grffile->roadstops == nullptr) _cur.grffile->roadstops = CallocT(NUM_ROADSTOPS_PER_GRF); for (int i = 0; i < numinfo; i++) { RoadStopSpec *rs = _cur.grffile->roadstops[id + i]; From 96f4eb36817e677ac1d0f3d904c61672432ceb3b Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Apr 2023 20:29:57 +0100 Subject: [PATCH 04/18] Codechange: Check NewGRF feature is defined before processing any sprite group mapping. Previously this was checked after loading ids, or repeatedly checked for each item. --- src/newgrf.cpp | 65 +++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 55746aa263..dac2d3b3ba 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5706,6 +5706,11 @@ static void CanalMapSpriteGroup(ByteReader *buf, uint8 idcount) static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->stations == nullptr) { + grfmsg(1, "StationMapSpriteGroup: No stations defined, skipping"); + return; + } + uint8 *stations = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { stations[i] = buf->ReadByte(); @@ -5758,6 +5763,11 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->housespec == nullptr) { + grfmsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping"); + return; + } + uint8 *houses = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { houses[i] = buf->ReadByte(); @@ -5770,11 +5780,6 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "TownHouseMapSpriteGroup")) return; - if (_cur.grffile->housespec == nullptr) { - grfmsg(1, "TownHouseMapSpriteGroup: No houses defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { HouseSpec *hs = _cur.grffile->housespec[houses[i]]; @@ -5789,6 +5794,11 @@ static void TownHouseMapSpriteGroup(ByteReader *buf, uint8 idcount) static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->industryspec == nullptr) { + grfmsg(1, "IndustryMapSpriteGroup: No industries defined, skipping"); + return; + } + uint8 *industries = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { industries[i] = buf->ReadByte(); @@ -5801,11 +5811,6 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return; - if (_cur.grffile->industryspec == nullptr) { - grfmsg(1, "IndustryMapSpriteGroup: No industries defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { IndustrySpec *indsp = _cur.grffile->industryspec[industries[i]]; @@ -5820,6 +5825,11 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->indtspec == nullptr) { + grfmsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping"); + return; + } + uint8 *indtiles = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { indtiles[i] = buf->ReadByte(); @@ -5832,11 +5842,6 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return; - if (_cur.grffile->indtspec == nullptr) { - grfmsg(1, "IndustrytileMapSpriteGroup: No industry tiles defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { IndustryTileSpec *indtsp = _cur.grffile->indtspec[indtiles[i]]; @@ -5998,6 +6003,11 @@ static void RoadTypeMapSpriteGroup(ByteReader *buf, uint8 idcount, RoadTramType static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->airportspec == nullptr) { + grfmsg(1, "AirportMapSpriteGroup: No airports defined, skipping"); + return; + } + uint8 *airports = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { airports[i] = buf->ReadByte(); @@ -6010,11 +6020,6 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "AirportMapSpriteGroup")) return; - if (_cur.grffile->airportspec == nullptr) { - grfmsg(1, "AirportMapSpriteGroup: No airports defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { AirportSpec *as = _cur.grffile->airportspec[airports[i]]; @@ -6029,6 +6034,11 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->airtspec == nullptr) { + grfmsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping"); + return; + } + uint8 *airptiles = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { airptiles[i] = buf->ReadByte(); @@ -6041,11 +6051,6 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "AirportTileMapSpriteGroup")) return; - if (_cur.grffile->airtspec == nullptr) { - grfmsg(1, "AirportTileMapSpriteGroup: No airport tiles defined, skipping"); - return; - } - for (uint i = 0; i < idcount; i++) { AirportTileSpec *airtsp = _cur.grffile->airtspec[airptiles[i]]; @@ -6060,6 +6065,11 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount) static void RoadStopMapSpriteGroup(ByteReader *buf, uint8 idcount) { + if (_cur.grffile->roadstops == nullptr) { + grfmsg(1, "RoadStopMapSpriteGroup: No roadstops defined, skipping"); + return; + } + uint8 *roadstops = AllocaM(uint8, idcount); for (uint i = 0; i < idcount; i++) { roadstops[i] = buf->ReadByte(); @@ -6089,11 +6099,6 @@ static void RoadStopMapSpriteGroup(ByteReader *buf, uint8 idcount) uint16 groupid = buf->ReadWord(); if (!IsValidGroupID(groupid, "RoadStopMapSpriteGroup")) return; - if (_cur.grffile->roadstops == nullptr) { - grfmsg(0, "RoadStopMapSpriteGroup: No roadstops defined, skipping."); - return; - } - for (uint i = 0; i < idcount; i++) { RoadStopSpec *roadstopspec = _cur.grffile->roadstops == nullptr ? nullptr : _cur.grffile->roadstops[roadstops[i]]; From 8361cf5a73f60687e7164be771b62e2bfadc1c46 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Apr 2023 20:29:58 +0100 Subject: [PATCH 05/18] Fix: Check sprite group mapping ID is within bounds of feature. --- src/newgrf.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index dac2d3b3ba..82dfe8cde7 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -5726,7 +5726,7 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) if (ctype == CT_INVALID) continue; for (uint i = 0; i < idcount; i++) { - StationSpec *statspec = _cur.grffile->stations == nullptr ? nullptr : _cur.grffile->stations[stations[i]]; + StationSpec *statspec = stations[i] >= NUM_STATIONS_PER_GRF ? nullptr : _cur.grffile->stations[stations[i]]; if (statspec == nullptr) { grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stations[i]); @@ -5741,7 +5741,7 @@ static void StationMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "StationMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - StationSpec *statspec = _cur.grffile->stations == nullptr ? nullptr : _cur.grffile->stations[stations[i]]; + StationSpec *statspec = stations[i] >= NUM_STATIONS_PER_GRF ? nullptr : _cur.grffile->stations[stations[i]]; if (statspec == nullptr) { grfmsg(1, "StationMapSpriteGroup: Station with ID 0x%02X does not exist, skipping", stations[i]); @@ -5812,7 +5812,7 @@ static void IndustryMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "IndustryMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - IndustrySpec *indsp = _cur.grffile->industryspec[industries[i]]; + IndustrySpec *indsp = industries[i] >= NUM_INDUSTRYTYPES_PER_GRF ? nullptr : _cur.grffile->industryspec[industries[i]]; if (indsp == nullptr) { grfmsg(1, "IndustryMapSpriteGroup: Industry %d undefined, skipping", industries[i]); @@ -5843,7 +5843,7 @@ static void IndustrytileMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "IndustrytileMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - IndustryTileSpec *indtsp = _cur.grffile->indtspec[indtiles[i]]; + IndustryTileSpec *indtsp = indtiles[i] >= NUM_INDUSTRYTILES_PER_GRF ? nullptr : _cur.grffile->indtspec[indtiles[i]]; if (indtsp == nullptr) { grfmsg(1, "IndustrytileMapSpriteGroup: Industry tile %d undefined, skipping", indtiles[i]); @@ -5904,7 +5904,7 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount) if (ctype == CT_INVALID) continue; for (uint i = 0; i < idcount; i++) { - ObjectSpec *spec = _cur.grffile->objectspec[objects[i]]; + ObjectSpec *spec = objects[i] >= NUM_OBJECTS_PER_GRF ? nullptr : _cur.grffile->objectspec[objects[i]]; if (spec == nullptr) { grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X undefined, skipping", objects[i]); @@ -5919,7 +5919,7 @@ static void ObjectMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "ObjectMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - ObjectSpec *spec = _cur.grffile->objectspec[objects[i]]; + ObjectSpec *spec = objects[i] >= NUM_OBJECTS_PER_GRF ? nullptr : _cur.grffile->objectspec[objects[i]]; if (spec == nullptr) { grfmsg(1, "ObjectMapSpriteGroup: Object with ID 0x%02X undefined, skipping", objects[i]); @@ -6021,7 +6021,7 @@ static void AirportMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "AirportMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - AirportSpec *as = _cur.grffile->airportspec[airports[i]]; + AirportSpec *as = airports[i] >= NUM_AIRPORTS_PER_GRF ? nullptr : _cur.grffile->airportspec[airports[i]]; if (as == nullptr) { grfmsg(1, "AirportMapSpriteGroup: Airport %d undefined, skipping", airports[i]); @@ -6052,7 +6052,7 @@ static void AirportTileMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "AirportTileMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - AirportTileSpec *airtsp = _cur.grffile->airtspec[airptiles[i]]; + AirportTileSpec *airtsp = airptiles[i] >= NUM_AIRPORTTILES_PER_GRF ? nullptr : _cur.grffile->airtspec[airptiles[i]]; if (airtsp == nullptr) { grfmsg(1, "AirportTileMapSpriteGroup: Airport tile %d undefined, skipping", airptiles[i]); @@ -6085,7 +6085,7 @@ static void RoadStopMapSpriteGroup(ByteReader *buf, uint8 idcount) if (ctype == CT_INVALID) continue; for (uint i = 0; i < idcount; i++) { - RoadStopSpec *roadstopspec = _cur.grffile->roadstops == nullptr ? nullptr : _cur.grffile->roadstops[roadstops[i]]; + RoadStopSpec *roadstopspec = roadstops[i] >= NUM_ROADSTOPS_PER_GRF ? nullptr : _cur.grffile->roadstops[roadstops[i]]; if (roadstopspec == nullptr) { grfmsg(1, "RoadStopMapSpriteGroup: Road stop with ID 0x%02X does not exist, skipping", roadstops[i]); @@ -6100,7 +6100,7 @@ static void RoadStopMapSpriteGroup(ByteReader *buf, uint8 idcount) if (!IsValidGroupID(groupid, "RoadStopMapSpriteGroup")) return; for (uint i = 0; i < idcount; i++) { - RoadStopSpec *roadstopspec = _cur.grffile->roadstops == nullptr ? nullptr : _cur.grffile->roadstops[roadstops[i]]; + RoadStopSpec *roadstopspec = roadstops[i] >= NUM_ROADSTOPS_PER_GRF ? nullptr : _cur.grffile->roadstops[roadstops[i]]; if (roadstopspec == nullptr) { grfmsg(1, "RoadStopMapSpriteGroup: Road stop with ID 0x%02X does not exist, skipping.", roadstops[i]); From cd6c04a6630de0d8a123f670b108b813c4486a6c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Apr 2023 20:29:59 +0100 Subject: [PATCH 06/18] Fix: Check station ID is within bounds when copying layouts. --- src/newgrf.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 82dfe8cde7..387d95fd7a 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2000,7 +2000,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte case 0x0A: { // Copy sprite layout byte srcid = buf->ReadByte(); - const StationSpec *srcstatspec = _cur.grffile->stations[srcid]; + const StationSpec *srcstatspec = srcid >= NUM_STATIONS_PER_GRF ? nullptr : _cur.grffile->stations[srcid]; if (srcstatspec == nullptr) { grfmsg(1, "StationChangeInfo: Station %u is not defined, cannot copy sprite layout to %u.", srcid, stid + i); @@ -2054,7 +2054,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte case 0x0F: { // Copy custom layout byte srcid = buf->ReadByte(); - const StationSpec *srcstatspec = _cur.grffile->stations[srcid]; + const StationSpec *srcstatspec = srcid >= NUM_STATIONS_PER_GRF ? nullptr : _cur.grffile->stations[srcid]; if (srcstatspec == nullptr) { grfmsg(1, "StationChangeInfo: Station %u is not defined, cannot copy tile layout to %u.", srcid, stid + i); From 08977828ccc60545053af0de8db779484ea2af3e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 6 Apr 2023 20:30:01 +0100 Subject: [PATCH 07/18] Fix: Check ID for name is within bounds. --- src/newgrf.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 387d95fd7a..bd283fa6d8 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6301,7 +6301,7 @@ static void FeatureNewName(ByteReader *buf) switch (GB(id, 8, 8)) { case 0xC4: // Station class name - if (_cur.grffile->stations == nullptr || _cur.grffile->stations[GB(id, 0, 8)] == nullptr) { + if (GB(id, 0, 8) >= NUM_STATIONS_PER_GRF || _cur.grffile->stations == nullptr || _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; @@ -6310,7 +6310,7 @@ static void FeatureNewName(ByteReader *buf) break; case 0xC5: // Station name - if (_cur.grffile->stations == nullptr || _cur.grffile->stations[GB(id, 0, 8)] == nullptr) { + if (GB(id, 0, 8) >= NUM_STATIONS_PER_GRF || _cur.grffile->stations == nullptr || _cur.grffile->stations[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined station 0x%X, ignoring", GB(id, 0, 8)); } else { _cur.grffile->stations[GB(id, 0, 8)]->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); @@ -6318,7 +6318,7 @@ static void FeatureNewName(ByteReader *buf) break; case 0xC7: // Airporttile name - if (_cur.grffile->airtspec == nullptr || _cur.grffile->airtspec[GB(id, 0, 8)] == nullptr) { + if (GB(id, 0, 8) >= NUM_AIRPORTTILES_PER_GRF || _cur.grffile->airtspec == nullptr || _cur.grffile->airtspec[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined airport tile 0x%X, ignoring", GB(id, 0, 8)); } else { _cur.grffile->airtspec[GB(id, 0, 8)]->name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); @@ -6326,7 +6326,7 @@ static void FeatureNewName(ByteReader *buf) break; case 0xC9: // House name - if (_cur.grffile->housespec == nullptr || _cur.grffile->housespec[GB(id, 0, 8)] == nullptr) { + if (GB(id, 0, 8) >= NUM_HOUSES_PER_GRF || _cur.grffile->housespec == nullptr || _cur.grffile->housespec[GB(id, 0, 8)] == nullptr) { grfmsg(1, "FeatureNewName: Attempt to name undefined house 0x%X, ignoring.", GB(id, 0, 8)); } else { _cur.grffile->housespec[GB(id, 0, 8)]->building_name = AddGRFString(_cur.grffile->grfid, id, lang, new_scheme, false, name, STR_UNDEFINED); From 65e0b0dcb752426d194c6a2449ca2b80b97b45c4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 5 Apr 2023 07:49:41 +0100 Subject: [PATCH 08/18] Codechange: Be consistent with how company masks are set to all. --- src/engine.cpp | 8 ++++---- src/road.cpp | 2 +- src/saveload/afterload.cpp | 6 +++--- src/saveload/engine_sl.cpp | 2 +- src/saveload/oldloader_sl.cpp | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/engine.cpp b/src/engine.cpp index 649c49804d..c05bbc89e6 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -675,7 +675,7 @@ void StartupOneEngine(Engine *e, Date aging_date, uint32 seed) e->intro_date = ei->base_intro <= ConvertYMDToDate(_settings_game.game_creation.starting_year + 2, 0, 1) ? ei->base_intro : (Date)GB(r, 0, 9) + ei->base_intro; if (e->intro_date <= _date) { e->age = (aging_date - e->intro_date) >> 5; - e->company_avail = (CompanyMask)-1; + e->company_avail = MAX_UVALUE(CompanyMask); e->flags |= ENGINE_AVAILABLE; } @@ -804,7 +804,7 @@ static void AcceptEnginePreview(EngineID eid, CompanyID company, int recursion_d Engine *e = Engine::Get(eid); e->preview_company = INVALID_COMPANY; - e->preview_asked = (CompanyMask)-1; + e->preview_asked = MAX_UVALUE(CompanyMask); EnableEngineForCompany(eid, company); @@ -899,7 +899,7 @@ void EnginesDailyLoop() e->preview_company = GetPreviewCompany(e); if (e->preview_company == INVALID_COMPANY) { - e->preview_asked = (CompanyMask)-1; + e->preview_asked = MAX_UVALUE(CompanyMask); continue; } @@ -1028,7 +1028,7 @@ static void NewVehicleAvailable(Engine *e) AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type); /* Now available for all companies */ - e->company_avail = (CompanyMask)-1; + e->company_avail = MAX_UVALUE(CompanyMask); /* Do not introduce new rail wagons */ if (IsWagon(index)) return; diff --git a/src/road.cpp b/src/road.cpp index bbe1960f61..5c5429bdbf 100644 --- a/src/road.cpp +++ b/src/road.cpp @@ -286,7 +286,7 @@ RoadTypes ExistingRoadTypes(CompanyID c) if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; /* Check whether available for all potential companies */ - if (e->company_avail != (CompanyMask)-1) continue; + if (e->company_avail != MAX_UVALUE(CompanyMask)) continue; known_roadtypes |= GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 6ebf4ccff1..f1c0a4d2fd 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2011,15 +2011,15 @@ bool AfterLoadGame() /* More companies ... */ for (Company *c : Company::Iterate()) { - if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = 0xFFFF; + if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = MAX_UVALUE(CompanyMask); } for (Engine *e : Engine::Iterate()) { - if (e->company_avail == 0xFF) e->company_avail = 0xFFFF; + if (e->company_avail == 0xFF) e->company_avail = MAX_UVALUE(CompanyMask); } for (Town *t : Town::Iterate()) { - if (t->have_ratings == 0xFF) t->have_ratings = 0xFFFF; + if (t->have_ratings == 0xFF) t->have_ratings = MAX_UVALUE(CompanyMask); for (uint i = 8; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL; } } diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 39699e04d5..52afe8b015 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -110,7 +110,7 @@ struct ENGNChunkHandler : ChunkHandler { * Just cancel any previews. */ e->flags &= ~4; // ENGINE_OFFER_WINDOW_OPEN e->preview_company = INVALID_COMPANY; - e->preview_asked = (CompanyMask)-1; + e->preview_asked = MAX_UVALUE(CompanyMask); } } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index fa87681d8b..b437cbf5f6 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -413,7 +413,7 @@ static bool FixTTOEngines() /* Make sure for example monorail and maglev are available when they should be */ if (_date >= e->intro_date && HasBit(e->info.climates, 0)) { e->flags |= ENGINE_AVAILABLE; - e->company_avail = (CompanyMask)0xFF; + e->company_avail = MAX_UVALUE(CompanyMask); e->age = _date > e->intro_date ? (_date - e->intro_date) / 30 : 0; } } else { @@ -438,7 +438,7 @@ static bool FixTTOEngines() * if at least one of them was available. */ for (uint j = 0; j < lengthof(tto_to_ttd); j++) { if (tto_to_ttd[j] == i && _old_engines[j].company_avail != 0) { - e->company_avail = (CompanyMask)0xFF; + e->company_avail = MAX_UVALUE(CompanyMask); e->flags |= ENGINE_AVAILABLE; break; } @@ -448,7 +448,7 @@ static bool FixTTOEngines() } e->preview_company = INVALID_COMPANY; - e->preview_asked = (CompanyMask)-1; + e->preview_asked = MAX_UVALUE(CompanyMask); e->preview_wait = 0; e->name = std::string{}; } From 5199881a8d053a698a8628b3950be58113287166 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 7 Apr 2023 10:12:29 +0100 Subject: [PATCH 09/18] Codechange: Use correct type for linkgraph company mask. --- src/linkgraph/linkgraph_gui.cpp | 4 ++-- src/linkgraph/linkgraph_gui.h | 8 ++++---- src/smallmap_gui.cpp | 2 +- src/smallmap_gui.h | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index b000ae5cc3..bf8e21ef7d 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -444,7 +444,7 @@ void LinkGraphOverlay::SetCargoMask(CargoTypes cargo_mask) * Set a new company mask and rebuild the cache. * @param company_mask New company mask. */ -void LinkGraphOverlay::SetCompanyMask(uint32 company_mask) +void LinkGraphOverlay::SetCompanyMask(CompanyMask company_mask) { this->company_mask = company_mask; this->RebuildCache(); @@ -564,7 +564,7 @@ LinkGraphLegendWindow::LinkGraphLegendWindow(WindowDesc *desc, int window_number */ void LinkGraphLegendWindow::SetOverlay(std::shared_ptr overlay) { this->overlay = overlay; - uint32 companies = this->overlay->GetCompanyMask(); + CompanyMask companies = this->overlay->GetCompanyMask(); for (uint c = 0; c < MAX_COMPANIES; c++) { if (!this->IsWidgetDisabled(WID_LGL_COMPANY_FIRST + c)) { this->SetWidgetLoweredState(WID_LGL_COMPANY_FIRST + c, HasBit(companies, c)); diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index 2d3c2baaff..31cbafbb08 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -56,13 +56,13 @@ public: * @param company_mask Bitmask of companies to be shown. * @param scale Desired thickness of lines and size of station dots. */ - LinkGraphOverlay(Window *w, uint wid, CargoTypes cargo_mask, uint32 company_mask, uint scale) : + LinkGraphOverlay(Window *w, uint wid, CargoTypes cargo_mask, CompanyMask company_mask, uint scale) : window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale) {} void Draw(const DrawPixelInfo *dpi); void SetCargoMask(CargoTypes cargo_mask); - void SetCompanyMask(uint32 company_mask); + void SetCompanyMask(CompanyMask company_mask); bool ShowTooltip(Point pt, TooltipCloseCondition close_cond); @@ -73,13 +73,13 @@ public: CargoTypes GetCargoMask() { return this->cargo_mask; } /** Get a bitmask of the currently shown companies. */ - uint32 GetCompanyMask() { return this->company_mask; } + CompanyMask GetCompanyMask() { return this->company_mask; } protected: Window *window; ///< Window to be drawn into. const uint widget_id; ///< ID of Widget in Window to be drawn to. CargoTypes cargo_mask; ///< Bitmask of cargos to be displayed. - uint32 company_mask; ///< Bitmask of companies to be displayed. + CompanyMask company_mask; ///< Bitmask of companies to be displayed. LinkMap cached_links; ///< Cache for links to reduce recalculation. StationSupplyList cached_stations; ///< Cache for stations to be drawn. uint scale; ///< Width of link lines. diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 7514fdbe99..4e448a05c2 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -1594,7 +1594,7 @@ int SmallMapWindow::GetPositionOnLegend(Point pt) if (!this->refresh.Elapsed(delta_ms)) return; if (this->map_type == SMT_LINKSTATS) { - uint32 company_mask = this->GetOverlayCompanyMask(); + CompanyMask company_mask = this->GetOverlayCompanyMask(); if (this->overlay->GetCompanyMask() != company_mask) { this->overlay->SetCompanyMask(company_mask); } else { diff --git a/src/smallmap_gui.h b/src/smallmap_gui.h index cb2992bbae..774a42a841 100644 --- a/src/smallmap_gui.h +++ b/src/smallmap_gui.h @@ -151,9 +151,9 @@ protected: * the _local_company. Spectators get to see all companies' links. * @return Company mask. */ - inline uint32 GetOverlayCompanyMask() const + inline CompanyMask GetOverlayCompanyMask() const { - return Company::IsValidID(_local_company) ? 1U << _local_company : 0xffffffff; + return Company::IsValidID(_local_company) ? 1U << _local_company : MAX_UVALUE(CompanyMask); } void RebuildColourIndexIfNecessary(); From 47e12a8790cdd129908d8c8009ec07ab380d98e1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 7 Apr 2023 10:21:22 +0100 Subject: [PATCH 10/18] Codechange: Check that CompanyMask fits into 16 bits during compilation. --- src/network/network_client.cpp | 1 + src/network/network_server.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 5fab9a655d..2912874560 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1120,6 +1120,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_COMPANY_UPDATE( { if (this->status < STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET; + static_assert(sizeof(_network_company_passworded) <= sizeof(uint16)); _network_company_passworded = p->Recv_uint16(); SetWindowClassesDirty(WC_COMPANY); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index e40b973ea5..3a61cab445 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -775,6 +775,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyUpdate() { Packet *p = new Packet(PACKET_SERVER_COMPANY_UPDATE); + static_assert(sizeof(_network_company_passworded) <= sizeof(uint16)); p->Send_uint16(_network_company_passworded); this->SendPacket(p); return NETWORK_RECV_STATUS_OKAY; From 43cea852a6cec1c453ebf193ab237cc0cf23b6db Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 22 Mar 2023 16:46:40 +0000 Subject: [PATCH 11/18] Fix 41b414b: Validate RAW_STRING parameter values in game_script mode --- src/strings.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/strings.cpp b/src/strings.cpp index 2f39a39991..bd4fe15cc9 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -799,6 +799,9 @@ uint ConvertDisplaySpeedToKmhishSpeed(uint speed) { return _units_velocity[_settings_game.locale.units_velocity].c.FromDisplay(speed * 16, true, 10); } + +static std::vector _game_script_raw_strings; + /** * Parse most format codes within a string and write the result to a buffer. * @param buff The buffer to write the final string to. @@ -932,6 +935,7 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg sub_args_need_free[i] = true; sub_args.SetParam(i++, (uint64)(size_t)g); + _game_script_raw_strings.push_back(g); } } /* If we didn't error out, we can actually print the string. */ @@ -941,7 +945,10 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } for (i = 0; i < 20; i++) { - if (sub_args_need_free[i]) free((void *)sub_args.GetParam(i)); + if (sub_args_need_free[i]) { + free((void *)sub_args.GetParam(i)); + _game_script_raw_strings.pop_back(); + } } break; } @@ -1046,6 +1053,10 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg case SCC_RAW_STRING_POINTER: { // {RAW_STRING} const char *raw_string = (const char *)(size_t)args->GetInt64(SCC_RAW_STRING_POINTER); + if (game_script && std::find(_game_script_raw_strings.begin(), _game_script_raw_strings.end(), raw_string) == _game_script_raw_strings.end()) { + buff = strecat(buff, "(invalid RAW_STRING parameter)", last); + break; + } buff = FormatString(buff, raw_string, args, last); break; } From 3a48d6e60ffc83cb50cdb117747b0b18cf55e3ab Mon Sep 17 00:00:00 2001 From: glx22 Date: Sun, 2 Apr 2023 00:47:36 +0200 Subject: [PATCH 12/18] Fix 991a797: [Script] Allow STRINGN consumption to be different than expected --- src/script/api/script_text.cpp | 72 ++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 20 deletions(-) diff --git a/src/script/api/script_text.cpp b/src/script/api/script_text.cpp index 79166ee394..228b6954c4 100644 --- a/src/script/api/script_text.cpp +++ b/src/script/api/script_text.cpp @@ -12,6 +12,7 @@ #include "../../strings_func.h" #include "../../game/game_text.hpp" #include "script_text.hpp" +#include "script_log.hpp" #include "../script_fatalerror.hpp" #include "../../table/control_codes.h" @@ -179,31 +180,62 @@ char *ScriptText::_GetEncodedText(char *p, char *lastofp, int ¶m_count, Stri const StringParams ¶ms = GetGameStringParams(this->string); int cur_idx = 0; + int prev_string = -1; + int prev_idx = -1; + int prev_count = -1; for (const StringParam &cur_param : params) { if (cur_idx >= this->paramc) throw Script_FatalError(fmt::format("{}: Not enough parameters", name)); - switch (cur_param.type) { - case StringParam::RAW_STRING: - if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects a raw string", name, cur_idx)); - p += seprintf(p, lastofp, ":\"%s\"", std::get(this->param[cur_idx++]).c_str()); - break; - - case StringParam::STRING: { - if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects a substring", name, cur_idx)); - int count = 1; // 1 because the string id is included in consumed parameters - p += seprintf(p, lastofp, ":"); - p = std::get(this->param[cur_idx++])->_GetEncodedText(p, lastofp, count, seen_ids); - if (count != cur_param.consumes) throw Script_FatalError(fmt::format("{}: Parameter {} substring consumes {}, but expected {} to be consumed", name, cur_idx, count - 1, cur_param.consumes - 1)); - break; - } - - default: - if (cur_idx + cur_param.consumes > this->paramc) throw Script_FatalError(fmt::format("{}: Not enough parameters", name)); - for (int i = 0; i < cur_param.consumes; i++) { - if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects an integer", name, cur_idx)); - p += seprintf(p, lastofp,":" OTTD_PRINTFHEX64, std::get(this->param[cur_idx++])); + if (prev_string != -1) { + /* The previous substring added more parameters than expected, means we will consume them but can't properly validate them. */ + for (int i = 0; i < cur_param.consumes; i++) { + if (prev_idx < prev_count) { + ScriptLog::Warning(fmt::format("{}: Parameter {} uses parameter {} from substring {} and cannot be validated", name, param_count + i, prev_idx++, prev_string).c_str()); + } else { + /* No more extra parameters, assume SQInteger are expected. */ + if (cur_idx >= this->paramc) throw Script_FatalError(fmt::format("{}: Not enough parameters", name)); + if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects an integer", name, param_count + i)); + p += seprintf(p, lastofp, ":" OTTD_PRINTFHEX64, std::get(this->param[cur_idx++])); } + } + if (prev_idx == prev_count) { + /* Re-enable validation. */ + prev_string = -1; + } + } else { + switch (cur_param.type) { + case StringParam::RAW_STRING: + if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects a raw string", name, param_count)); + p += seprintf(p, lastofp, ":\"%s\"", std::get(this->param[cur_idx++]).c_str()); + break; + + case StringParam::STRING: { + if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects a substring", name, param_count)); + int count = 0; + p += seprintf(p, lastofp, ":"); + p = std::get(this->param[cur_idx++])->_GetEncodedText(p, lastofp, count, seen_ids); + if (++count != cur_param.consumes) { + ScriptLog::Error(fmt::format("{}: Parameter {} substring consumes {}, but expected {} to be consumed", name, param_count, count - 1, cur_param.consumes - 1).c_str()); + /* Fill missing params if needed. */ + for (int i = count; i < cur_param.consumes; i++) p += seprintf(p, lastofp, ":0"); + /* Disable validation for the extra params if any. */ + if (count > cur_param.consumes) { + prev_string = param_count; + prev_idx = cur_param.consumes - 1; + prev_count = count - 1; + } + } + break; + } + + default: + if (cur_idx + cur_param.consumes > this->paramc) throw Script_FatalError(fmt::format("{}: Not enough parameters", name)); + for (int i = 0; i < cur_param.consumes; i++) { + if (!std::holds_alternative(this->param[cur_idx])) throw Script_FatalError(fmt::format("{}: Parameter {} expects an integer", name, param_count + i)); + p += seprintf(p, lastofp, ":" OTTD_PRINTFHEX64, std::get(this->param[cur_idx++])); + } + } } param_count += cur_param.consumes; From f1144de509afc4e8be5f8692abaf6f558ccf0604 Mon Sep 17 00:00:00 2001 From: PeterN Date: Sat, 8 Apr 2023 17:26:13 +0100 Subject: [PATCH 13/18] Feature: Separate rail/road and sea/air velocity units, and add knots. (#10594) This is achieved by packing vehicle type along with the velocity so that the string system can decode and pick the appropriate unit. --- src/bridge_gui.cpp | 2 +- src/build_vehicle_gui.cpp | 22 ++++++------ src/engine_gui.cpp | 10 +++--- src/lang/english.txt | 7 ++-- src/misc_gui.cpp | 6 ++-- src/order_gui.cpp | 12 +++---- src/rail_gui.cpp | 2 +- src/road_gui.cpp | 2 +- src/saveload/afterload.cpp | 5 +++ src/saveload/saveload.h | 2 ++ src/settings_gui.cpp | 1 + src/settings_type.h | 3 +- src/strings.cpp | 49 +++++++++++++++++--------- src/strings_func.h | 18 ++++++++-- src/table/settings/locale_settings.ini | 16 ++++++++- src/timetable_gui.cpp | 6 ++-- src/vehicle_gui.cpp | 14 ++++---- 17 files changed, 117 insertions(+), 60 deletions(-) diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 62f4c96b9b..0ed9ea78cc 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -138,7 +138,7 @@ private: StringID GetBridgeSelectString(const BuildBridgeData &bridge_data) const { SetDParam(0, bridge_data.spec->material); - SetDParam(1, bridge_data.spec->speed); + SetDParam(1, PackVelocity(bridge_data.spec->speed, static_cast(this->transport_type))); SetDParam(2, bridge_data.cost); /* If the bridge has no meaningful speed limit, don't display it. */ if (bridge_data.spec->speed == UINT16_MAX) { diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index b0d5d62e55..cc918c792a 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -611,7 +611,7 @@ static int DrawRailWagonPurchaseInfo(int left, int right, int y, EngineID engine if (_settings_game.vehicle.wagon_speed_limits) { uint max_speed = e->GetDisplayMaxSpeed(); if (max_speed > 0) { - SetDParam(0, max_speed); + SetDParam(0, PackVelocity(max_speed, e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_SPEED); y += FONT_HEIGHT_NORMAL; } @@ -646,7 +646,7 @@ static int DrawRailEnginePurchaseInfo(int left, int right, int y, EngineID engin y += FONT_HEIGHT_NORMAL; /* Max speed - Engine power */ - SetDParam(0, e->GetDisplayMaxSpeed()); + SetDParam(0, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); SetDParam(1, e->GetPower()); DrawString(left, right, y, STR_PURCHASE_INFO_SPEED_POWER); y += FONT_HEIGHT_NORMAL; @@ -701,7 +701,7 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n y += FONT_HEIGHT_NORMAL; /* Max speed - Engine power */ - SetDParam(0, e->GetDisplayMaxSpeed()); + SetDParam(0, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); SetDParam(1, e->GetPower()); DrawString(left, right, y, STR_PURCHASE_INFO_SPEED_POWER); y += FONT_HEIGHT_NORMAL; @@ -715,11 +715,11 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n if (te.cost != 0) { SetDParam(0, e->GetCost() + te.cost); SetDParam(1, te.cost); - SetDParam(2, e->GetDisplayMaxSpeed()); + SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_SPEED); } else { SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayMaxSpeed()); + SetDParam(1, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); } y += FONT_HEIGHT_NORMAL; @@ -747,11 +747,11 @@ static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_numb if (te.cost != 0) { SetDParam(0, e->GetCost() + te.cost); SetDParam(1, te.cost); - SetDParam(2, ocean_speed); + SetDParam(2, PackVelocity(ocean_speed, e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_SPEED); } else { SetDParam(0, e->GetCost()); - SetDParam(1, ocean_speed); + SetDParam(1, PackVelocity(ocean_speed, e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); } y += FONT_HEIGHT_NORMAL; @@ -766,11 +766,11 @@ static int DrawShipPurchaseInfo(int left, int right, int y, EngineID engine_numb } y += FONT_HEIGHT_NORMAL; - SetDParam(0, ocean_speed); + SetDParam(0, PackVelocity(ocean_speed, e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_SPEED_OCEAN); y += FONT_HEIGHT_NORMAL; - SetDParam(0, canal_speed); + SetDParam(0, PackVelocity(canal_speed, e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_SPEED_CANAL); y += FONT_HEIGHT_NORMAL; } @@ -807,11 +807,11 @@ static int DrawAircraftPurchaseInfo(int left, int right, int y, EngineID engine_ if (te.cost != 0) { SetDParam(0, e->GetCost() + te.cost); SetDParam(1, te.cost); - SetDParam(2, e->GetDisplayMaxSpeed()); + SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_COST_REFIT_SPEED); } else { SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayMaxSpeed()); + SetDParam(1, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); DrawString(left, right, y, STR_PURCHASE_INFO_COST_SPEED); } y += FONT_HEIGHT_NORMAL; diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 11a1cd7f3e..6b56ef91f9 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -170,7 +170,7 @@ uint GetTotalCapacityOfArticulatedParts(EngineID engine) static StringID GetTrainEngineInfoString(const Engine *e) { SetDParam(0, e->GetCost()); - SetDParam(2, e->GetDisplayMaxSpeed()); + SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); SetDParam(3, e->GetPower()); SetDParam(1, e->GetDisplayWeight()); SetDParam(7, e->GetDisplayMaxTractiveEffort()); @@ -196,7 +196,7 @@ static StringID GetAircraftEngineInfoString(const Engine *e) uint i = 0; SetDParam(i++, e->GetCost()); - SetDParam(i++, e->GetDisplayMaxSpeed()); + SetDParam(i++, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); SetDParam(i++, e->GetAircraftTypeText()); if (range > 0) SetDParam(i++, range); SetDParam(i++, cargo); @@ -217,7 +217,7 @@ static StringID GetRoadVehEngineInfoString(const Engine *e) { if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) { SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayMaxSpeed()); + SetDParam(1, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); uint capacity = GetTotalCapacityOfArticulatedParts(e->index); if (capacity != 0) { SetDParam(2, e->GetDefaultCargoType()); @@ -229,7 +229,7 @@ static StringID GetRoadVehEngineInfoString(const Engine *e) return STR_ENGINE_PREVIEW_COST_MAX_SPEED_CAP_RUNCOST; } else { SetDParam(0, e->GetCost()); - SetDParam(2, e->GetDisplayMaxSpeed()); + SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); SetDParam(3, e->GetPower()); SetDParam(1, e->GetDisplayWeight()); SetDParam(7, e->GetDisplayMaxTractiveEffort()); @@ -250,7 +250,7 @@ static StringID GetRoadVehEngineInfoString(const Engine *e) static StringID GetShipEngineInfoString(const Engine *e) { SetDParam(0, e->GetCost()); - SetDParam(1, e->GetDisplayMaxSpeed()); + SetDParam(1, PackVelocity(e->GetDisplayMaxSpeed(), e->type)); SetDParam(2, e->GetDefaultCargoType()); SetDParam(3, e->GetDisplayDefaultCapacity()); SetDParam(4, e->GetRunningCost()); diff --git a/src/lang/english.txt b/src/lang/english.txt index a0aec4db7b..55a8a21425 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -195,6 +195,7 @@ STR_UNITS_VELOCITY_IMPERIAL :{COMMA}{NBSP}mp STR_UNITS_VELOCITY_METRIC :{COMMA}{NBSP}km/h STR_UNITS_VELOCITY_SI :{COMMA}{NBSP}m/s STR_UNITS_VELOCITY_GAMEUNITS :{DECIMAL}{NBSP}tiles/day +STR_UNITS_VELOCITY_KNOTS :{COMMA}{NBSP}knots STR_UNITS_POWER_IMPERIAL :{COMMA}{NBSP}hp STR_UNITS_POWER_METRIC :{COMMA}{NBSP}hp @@ -1951,13 +1952,15 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Setting this to 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_LOCALISATION_UNITS_VELOCITY :Speed units: {STRING2} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Speed units (land): {STRING2} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Speed units (nautical): {STRING2} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Whenever a speed is shown in the user interface, show it in the selected units -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS :Game units (tiles/day) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Knots STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Vehicle power units: {STRING2} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Whenever a vehicle's power is shown in the user interface, show it in the selected units diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 3f6b03585d..f7567d0ed1 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -267,7 +267,7 @@ public: /* Rail speed limit */ if (td.rail_speed != 0) { - SetDParam(0, td.rail_speed); + SetDParam(0, PackVelocity(td.rail_speed, VEH_TRAIN)); this->landinfo_data.push_back(GetString(STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT)); } @@ -279,7 +279,7 @@ public: /* Road speed limit */ if (td.road_speed != 0) { - SetDParam(0, td.road_speed); + SetDParam(0, PackVelocity(td.road_speed, VEH_ROAD)); this->landinfo_data.push_back(GetString(STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT)); } @@ -291,7 +291,7 @@ public: /* Tram speed limit */ if (td.tram_speed != 0) { - SetDParam(0, td.tram_speed); + SetDParam(0, PackVelocity(td.tram_speed, VEH_ROAD)); this->landinfo_data.push_back(GetString(STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT)); } diff --git a/src/order_gui.cpp b/src/order_gui.cpp index db9074784b..2f68e0b839 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -177,8 +177,8 @@ static const StringID _order_conditional_condition[] = { INVALID_STRING_ID, }; -extern uint ConvertSpeedToDisplaySpeed(uint speed); -extern uint ConvertDisplaySpeedToSpeed(uint speed); +extern uint ConvertSpeedToDisplaySpeed(uint speed, VehicleType type); +extern uint ConvertDisplaySpeedToSpeed(uint speed, VehicleType type); static const StringID _order_depot_action_dropdown[] = { STR_ORDER_DROP_GO_ALWAYS_DEPOT, @@ -345,7 +345,7 @@ void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int SetDParam(3, STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS + occ); uint value = order->GetConditionValue(); - if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); + if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value, v->type); SetDParam(4, value); } @@ -1149,7 +1149,7 @@ public: if (order != nullptr && order->IsType(OT_CONDITIONAL)) { uint value = order->GetConditionValue(); - if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); + if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value, this->vehicle->type); SetDParam(0, value); } break; @@ -1317,7 +1317,7 @@ public: const Order *order = this->vehicle->GetOrder(this->OrderGetSel()); assert(order != nullptr); uint value = order->GetConditionValue(); - if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value); + if (order->GetConditionVariable() == OCV_MAX_SPEED) value = ConvertSpeedToDisplaySpeed(value, this->vehicle->type); SetDParam(0, value); ShowQueryString(STR_JUST_INT, STR_ORDER_CONDITIONAL_VALUE_CAPT, 5, this, CS_NUMERAL, QSF_NONE); break; @@ -1337,7 +1337,7 @@ public: switch (this->vehicle->GetOrder(sel)->GetConditionVariable()) { case OCV_MAX_SPEED: - value = ConvertDisplaySpeedToSpeed(value); + value = ConvertDisplaySpeedToSpeed(value, this->vehicle->type); break; case OCV_RELIABILITY: diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index f8bc5360aa..8532a04bd7 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -493,7 +493,7 @@ struct BuildRailToolbarWindow : Window { if (rti->max_speed > 0) { SetDParam(0, STR_TOOLBAR_RAILTYPE_VELOCITY); SetDParam(1, rti->strings.toolbar_caption); - SetDParam(2, rti->max_speed); + SetDParam(2, PackVelocity(rti->max_speed, VEH_TRAIN)); } else { SetDParam(0, rti->strings.toolbar_caption); } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 0c9ee9d298..ed5c0dc36f 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -411,7 +411,7 @@ struct BuildRoadToolbarWindow : Window { if (this->rti->max_speed > 0) { SetDParam(0, STR_TOOLBAR_RAILTYPE_VELOCITY); SetDParam(1, this->rti->strings.toolbar_caption); - SetDParam(2, this->rti->max_speed / 2); + SetDParam(2, PackVelocity(this->rti->max_speed / 2, VEH_ROAD)); } else { SetDParam(0, this->rti->strings.toolbar_caption); } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index f1c0a4d2fd..fe696647a1 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2877,6 +2877,11 @@ bool AfterLoadGame() _settings_game.locale.units_height = Clamp(_old_units, 0, 2); } + if (IsSavegameVersionBefore(SLV_VELOCITY_NAUTICAL)) { + /* Match nautical velocity with land velocity units. */ + _settings_game.locale.units_velocity_nautical = _settings_game.locale.units_velocity; + } + if (IsSavegameVersionBefore(SLV_186)) { /* Move ObjectType from map to pool */ for (auto t : Map::Iterate()) { diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 48bfa59be4..a8bb671517 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -347,6 +347,8 @@ enum SaveLoadVersion : uint16 { SLV_NEWGRF_ROAD_STOPS, ///< 303 PR#10144 NewGRF road stops. SLV_LINKGRAPH_EDGES, ///< 304 PR#10314 Explicitly store link graph edges destination, PR#10471 int64 instead of uint64 league rating + SLV_VELOCITY_NAUTICAL, ///< 305 PR#10594 Separation of land and nautical velocity (knots!) + SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 5d14637e64..36318d0a94 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1600,6 +1600,7 @@ static SettingsContainer &GetSettingsTree() SettingsPage *localisation = main->Add(new SettingsPage(STR_CONFIG_SETTING_LOCALISATION)); { localisation->Add(new SettingEntry("locale.units_velocity")); + localisation->Add(new SettingEntry("locale.units_velocity_nautical")); localisation->Add(new SettingEntry("locale.units_power")); localisation->Add(new SettingEntry("locale.units_weight")); localisation->Add(new SettingEntry("locale.units_volume")); diff --git a/src/settings_type.h b/src/settings_type.h index 2a33d3be0e..4b9bc2f447 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -234,7 +234,8 @@ struct MusicSettings { /** Settings related to currency/unit systems. */ struct LocaleSettings { byte currency; ///< currency we currently use - byte units_velocity; ///< unit system for velocity + 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 diff --git a/src/strings.cpp b/src/strings.cpp index bd4fe15cc9..8aa69bacd7 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -703,10 +703,11 @@ struct UnitsLong { /** Unit conversions for velocity. */ static const Units _units_velocity[] = { - { { 1, 0}, STR_UNITS_VELOCITY_IMPERIAL, 0 }, - { { 103, 6}, STR_UNITS_VELOCITY_METRIC, 0 }, - { { 1831, 12}, STR_UNITS_VELOCITY_SI, 0 }, - { {37888, 16}, STR_UNITS_VELOCITY_GAMEUNITS, 1 }, + { { 1, 0}, STR_UNITS_VELOCITY_IMPERIAL, 0 }, + { { 103, 6}, STR_UNITS_VELOCITY_METRIC, 0 }, + { { 1831, 12}, STR_UNITS_VELOCITY_SI, 0 }, + { { 37888, 16}, STR_UNITS_VELOCITY_GAMEUNITS, 1 }, + { { 7289499, 23}, STR_UNITS_VELOCITY_KNOTS, 0 }, }; /** Unit conversions for power. */ @@ -757,17 +758,29 @@ static const Units _units_height[] = { { { 1, 0}, STR_UNITS_HEIGHT_SI, 0 }, }; +/** + * Get index for velocity conversion units for a vehicle type. + * @param type VehicleType to convert velocity for. + * @return Index within velocity conversion units for vehicle type. + */ +static byte GetVelocityUnits(VehicleType type) +{ + if (type == VEH_SHIP || type == VEH_AIRCRAFT) return _settings_game.locale.units_velocity_nautical; + + return _settings_game.locale.units_velocity; +} + /** * Convert the given (internal) speed to the display speed. * @param speed the speed to convert * @return the converted speed. */ -uint ConvertSpeedToDisplaySpeed(uint speed) +uint ConvertSpeedToDisplaySpeed(uint speed, VehicleType type) { /* For historical reasons we don't want to mess with the * conversion for speed. So, don't round it and keep the * original conversion factors instead of the real ones. */ - return _units_velocity[_settings_game.locale.units_velocity].c.ToDisplay(speed, false); + return _units_velocity[GetVelocityUnits(type)].c.ToDisplay(speed, false); } /** @@ -775,9 +788,9 @@ uint ConvertSpeedToDisplaySpeed(uint speed) * @param speed the speed to convert * @return the converted speed. */ -uint ConvertDisplaySpeedToSpeed(uint speed) +uint ConvertDisplaySpeedToSpeed(uint speed, VehicleType type) { - return _units_velocity[_settings_game.locale.units_velocity].c.FromDisplay(speed); + return _units_velocity[GetVelocityUnits(type)].c.FromDisplay(speed); } /** @@ -785,9 +798,9 @@ uint ConvertDisplaySpeedToSpeed(uint speed) * @param speed the speed to convert * @return the converted speed. */ -uint ConvertKmhishSpeedToDisplaySpeed(uint speed) +uint ConvertKmhishSpeedToDisplaySpeed(uint speed, VehicleType type) { - return _units_velocity[_settings_game.locale.units_velocity].c.ToDisplay(speed * 10, false) / 16; + return _units_velocity[GetVelocityUnits(type)].c.ToDisplay(speed * 10, false) / 16; } /** @@ -795,9 +808,9 @@ uint ConvertKmhishSpeedToDisplaySpeed(uint speed) * @param speed the speed to convert * @return the converted speed. */ -uint ConvertDisplaySpeedToKmhishSpeed(uint speed) +uint ConvertDisplaySpeedToKmhishSpeed(uint speed, VehicleType type) { - return _units_velocity[_settings_game.locale.units_velocity].c.FromDisplay(speed * 16, true, 10); + return _units_velocity[GetVelocityUnits(type)].c.FromDisplay(speed * 16, true, 10); } static std::vector _game_script_raw_strings; @@ -1291,11 +1304,15 @@ static char *FormatString(char *buff, const char *str_arg, StringParameters *arg } case SCC_VELOCITY: { // {VELOCITY} - assert(_settings_game.locale.units_velocity < lengthof(_units_velocity)); - unsigned int decimal_places = _units_velocity[_settings_game.locale.units_velocity].decimal_places; - uint64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(args->GetInt64(SCC_VELOCITY)), decimal_places}; + int64 arg = args->GetInt64(SCC_VELOCITY); + // Unpack vehicle type from packed argument to get desired units. + VehicleType vt = static_cast(GB(arg, 56, 8)); + byte units = GetVelocityUnits(vt); + assert(units < lengthof(_units_velocity)); + unsigned int decimal_places = _units_velocity[units].decimal_places; + uint64 args_array[] = {ConvertKmhishSpeedToDisplaySpeed(GB(arg, 0, 56), vt), decimal_places}; StringParameters tmp_params(args_array, decimal_places ? 2 : 1, nullptr); - buff = FormatString(buff, GetStringPtr(_units_velocity[_settings_game.locale.units_velocity].s), &tmp_params, last); + buff = FormatString(buff, GetStringPtr(_units_velocity[units].s), &tmp_params, last); break; } diff --git a/src/strings_func.h b/src/strings_func.h index bdb4fc6cd6..760931d1a9 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -14,6 +14,7 @@ #include "string_type.h" #include "gfx_type.h" #include "core/bitmath_func.hpp" +#include "vehicle_type.h" /** * Extract the StringTab from a StringID. @@ -174,8 +175,21 @@ std::string GetString(StringID string); char *GetStringWithArgs(char *buffr, StringID string, StringParameters *args, const char *last, uint case_index = 0, bool game_script = false); const char *GetStringPtr(StringID string); -uint ConvertKmhishSpeedToDisplaySpeed(uint speed); -uint ConvertDisplaySpeedToKmhishSpeed(uint speed); +uint ConvertKmhishSpeedToDisplaySpeed(uint speed, VehicleType type); +uint ConvertDisplaySpeedToKmhishSpeed(uint speed, VehicleType type); + +/** + * Pack velocity and vehicle type for use with SCC_VELOCITY string parameter. + * @param speed Display speed for parameter. + * @param type Type of vehicle for parameter. + * @return Bit-packed velocity and vehicle type, for use with SetDParam(). + */ +static inline int64 PackVelocity(uint speed, VehicleType type) +{ + /* Vehicle type is a byte, so packed into the top 8 bits of the 64-bit + * parameter, although only values from 0-3 are relevant. */ + return speed | (static_cast(type) << 56); +} /** * Set a string parameter \a v at index \a n in a given array \a s. diff --git a/src/table/settings/locale_settings.ini b/src/table/settings/locale_settings.ini index da501755b7..33dd1eae1d 100644 --- a/src/table/settings/locale_settings.ini +++ b/src/table/settings/locale_settings.ini @@ -73,7 +73,7 @@ type = SLE_UINT8 from = SLV_184 flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN def = 1 -max = 3 +max = 4 full = _locale_units post_cb = [](auto) { MarkWholeScreenDirty(); } cat = SC_BASIC @@ -81,6 +81,20 @@ str = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL +[SDT_OMANY] +var = locale.units_velocity_nautical +type = SLE_UINT8 +from = SLV_VELOCITY_NAUTICAL +flags = SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN +def = 1 +max = 4 +full = _locale_units +post_cb = [](auto) { MarkWholeScreenDirty(); } +cat = SC_BASIC +str = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL +strhelp = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT +strval = STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL + [SDT_OMANY] var = locale.units_power type = SLE_UINT8 diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 8e0252a333..bb1efed006 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -408,7 +408,7 @@ struct TimetableWindow : Window { string = order->GetMaxSpeed() != UINT16_MAX ? STR_TIMETABLE_TRAVEL_FOR_SPEED : STR_TIMETABLE_TRAVEL_FOR; } - SetDParam(2, order->GetMaxSpeed()); + SetDParam(2, PackVelocity(order->GetMaxSpeed(), v->type)); DrawString(rtl ? tr.left : middle, rtl ? middle : tr.right, tr.top, string, colour); @@ -568,7 +568,7 @@ struct TimetableWindow : Window { const Order *order = v->GetOrder(real); if (order != nullptr) { if (order->GetMaxSpeed() != UINT16_MAX) { - SetDParam(0, ConvertKmhishSpeedToDisplaySpeed(order->GetMaxSpeed())); + SetDParam(0, ConvertKmhishSpeedToDisplaySpeed(order->GetMaxSpeed(), v->type)); current = STR_JUST_INT; } } @@ -628,7 +628,7 @@ struct TimetableWindow : Window { uint64 val = StrEmpty(str) ? 0 : strtoul(str, nullptr, 10); if (this->query_is_speed_query) { - val = ConvertDisplaySpeedToKmhishSpeed(val); + val = ConvertDisplaySpeedToKmhishSpeed(val, v->type); } else { if (!_settings_client.gui.timetable_in_ticks) val *= DAY_TICKS; } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index dadb726d21..21cdc20359 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2493,7 +2493,7 @@ struct VehicleDetailsWindow : Window { if (v->type == VEH_TRAIN || (v->type == VEH_ROAD && _settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL)) { const GroundVehicleCache *gcache = v->GetGroundVehicleCache(); - SetDParam(2, v->GetDisplayMaxSpeed()); + SetDParam(2, PackVelocity(v->GetDisplayMaxSpeed(), v->type)); SetDParam(1, gcache->cached_power); SetDParam(0, gcache->cached_weight); SetDParam(3, gcache->cached_max_te / 1000); @@ -2504,7 +2504,7 @@ struct VehicleDetailsWindow : Window { string = STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE; } } else { - SetDParam(0, v->GetDisplayMaxSpeed()); + SetDParam(0, PackVelocity(v->GetDisplayMaxSpeed(), v->type)); if (v->type == VEH_AIRCRAFT) { SetDParam(1, v->GetEngine()->GetAircraftTypeText()); if (Aircraft::From(v)->GetRange() > 0) { @@ -2999,7 +2999,7 @@ public: str = STR_VEHICLE_STATUS_STOPPED; } } else { - SetDParam(0, v->GetDisplaySpeed()); + SetDParam(0, PackVelocity(v->GetDisplaySpeed(), v->type)); str = STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL; } } else { // no train @@ -3020,7 +3020,7 @@ public: switch (v->current_order.GetType()) { case OT_GOTO_STATION: { SetDParam(0, v->current_order.GetDestination()); - SetDParam(1, v->GetDisplaySpeed()); + SetDParam(1, PackVelocity(v->GetDisplaySpeed(), v->type)); str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL : STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL; break; } @@ -3028,7 +3028,7 @@ public: case OT_GOTO_DEPOT: { SetDParam(0, v->type); SetDParam(1, v->current_order.GetDestination()); - SetDParam(2, v->GetDisplaySpeed()); + SetDParam(2, PackVelocity(v->GetDisplaySpeed(), v->type)); if (v->current_order.GetDestination() == INVALID_DEPOT) { /* This case *only* happens when multiple nearest depot orders * follow each other (including an order list only one order: a @@ -3053,7 +3053,7 @@ public: assert(v->type == VEH_TRAIN || v->type == VEH_SHIP); SetDParam(0, v->current_order.GetDestination()); str = HasBit(v->vehicle_flags, VF_PATHFINDER_LOST) ? STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL : STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL; - SetDParam(1, v->GetDisplaySpeed()); + SetDParam(1, PackVelocity(v->GetDisplaySpeed(), v->type)); break; } @@ -3066,7 +3066,7 @@ public: default: if (v->GetNumManualOrders() == 0) { str = STR_VEHICLE_STATUS_NO_ORDERS_VEL; - SetDParam(0, v->GetDisplaySpeed()); + SetDParam(0, PackVelocity(v->GetDisplaySpeed(), v->type)); } else { str = STR_EMPTY; } From 16916406031564938ae76454a570af79293759e2 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 8 Apr 2023 13:51:52 -0400 Subject: [PATCH 14/18] Fix: Specify units for value of share trading age setting (#10612) --- src/lang/english.txt | 3 +++ src/table/settings/economy_settings.ini | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 55a8a21425..ccd5664f8a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1809,6 +1809,9 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, a STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING2} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set the minimum age of a company for others to be able to buy and sell shares from them. +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_VALUE :{COMMA} year{P "" s} +###setting-zero-is-special +STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_NO_MIN :No minimum STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of leg profit to pay in feeder systems: {STRING2} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage of income given to the intermediate legs in feeder systems, giving more control over the income diff --git a/src/table/settings/economy_settings.ini b/src/table/settings/economy_settings.ini index ad2a74319d..8bcfdca58e 100644 --- a/src/table/settings/economy_settings.ini +++ b/src/table/settings/economy_settings.ini @@ -185,13 +185,14 @@ post_cb = [](auto) { InvalidateWindowClassesData(WC_COMPANY); } var = economy.min_years_for_shares type = SLE_UINT8 from = SLV_TRADING_AGE +flags = SF_GUI_0_IS_SPECIAL def = 6 min = 0 max = 255 interval = 1 str = STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES strhelp = STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT -strval = STR_JUST_INT +strval = STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_VALUE cat = SC_EXPERT [SDT_VAR] From 0de5eb53faa7df16417320be408001d96cf68a26 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 8 Apr 2023 14:04:30 -0400 Subject: [PATCH 15/18] Codechange: Use constants for service interval max/min/default values (#10611) --- src/order_func.h | 14 +++++++++---- src/settings_table.cpp | 23 ++++++++++++-------- src/table/settings/company_settings.ini | 28 ++++++++++++++----------- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/order_func.h b/src/order_func.h index 7faeb08429..2b8a76f920 100644 --- a/src/order_func.h +++ b/src/order_func.h @@ -26,10 +26,16 @@ uint GetOrderDistance(const Order *prev, const Order *cur, const Vehicle *v, int void DrawOrderString(const Vehicle *v, const Order *order, int order_index, int y, bool selected, bool timetable, int left, int middle, int right); -#define MIN_SERVINT_PERCENT 5 -#define MAX_SERVINT_PERCENT 90 -#define MIN_SERVINT_DAYS 30 -#define MAX_SERVINT_DAYS 800 +static const uint DEF_SERVINT_DAYS_TRAINS = 150; +static const uint DEF_SERVINT_DAYS_ROADVEH = 150; +static const uint DEF_SERVINT_DAYS_AIRCRAFT = 100; +static const uint DEF_SERVINT_DAYS_SHIPS = 360; +static const uint MIN_SERVINT_DAYS = 30; +static const uint MAX_SERVINT_DAYS = 800; + +static const uint DEF_SERVINT_PERCENT = 50; +static const uint MIN_SERVINT_PERCENT = 5; +static const uint MAX_SERVINT_PERCENT = 90; uint16 GetServiceIntervalClamped(uint interval, bool ispercent); diff --git a/src/settings_table.cpp b/src/settings_table.cpp index 9fda41720f..c1d335f6f4 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -127,7 +127,10 @@ static void UpdateConsists(int32 new_value) InvalidateWindowClassesData(WC_BUILD_VEHICLE, 0); } -/* Check service intervals of vehicles, newvalue is value of % or day based servicing */ +/** + * Check and update if needed all vehicle service intervals. + * @param new_value Contains 0 if service intervals are in days, otherwise intervals use percents. + */ static void UpdateAllServiceInterval(int32 new_value) { bool update_vehicles; @@ -141,15 +144,17 @@ static void UpdateAllServiceInterval(int32 new_value) } if (new_value != 0) { - vds->servint_trains = 50; - vds->servint_roadveh = 50; - vds->servint_aircraft = 50; - vds->servint_ships = 50; + /* Service intervals are in percents. */ + vds->servint_trains = DEF_SERVINT_PERCENT; + vds->servint_roadveh = DEF_SERVINT_PERCENT; + vds->servint_aircraft = DEF_SERVINT_PERCENT; + vds->servint_ships = DEF_SERVINT_PERCENT; } else { - vds->servint_trains = 150; - vds->servint_roadveh = 150; - vds->servint_aircraft = 100; - vds->servint_ships = 360; + /* Service intervals are in days. */ + vds->servint_trains = DEF_SERVINT_DAYS_TRAINS; + vds->servint_roadveh = DEF_SERVINT_DAYS_ROADVEH; + vds->servint_aircraft = DEF_SERVINT_DAYS_AIRCRAFT; + vds->servint_ships = DEF_SERVINT_DAYS_SHIPS; } if (update_vehicles) { diff --git a/src/table/settings/company_settings.ini b/src/table/settings/company_settings.ini index ef299e1e22..9d4b17898a 100644 --- a/src/table/settings/company_settings.ini +++ b/src/table/settings/company_settings.ini @@ -83,9 +83,10 @@ post_cb = UpdateAllServiceInterval var = vehicle.servint_trains type = SLE_UINT16 flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL -def = 150 -min = 5 -max = 800 +def = DEF_SERVINT_DAYS_TRAINS +min = MIN_SERVINT_PERCENT +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 @@ -96,9 +97,10 @@ post_cb = [](auto new_value) { UpdateServiceInterval(VEH_TRAIN, new_value); } var = vehicle.servint_roadveh type = SLE_UINT16 flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL -def = 150 -min = 5 -max = 800 +def = DEF_SERVINT_DAYS_ROADVEH +min = MIN_SERVINT_PERCENT +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 @@ -109,9 +111,10 @@ post_cb = [](auto new_value) { UpdateServiceInterval(VEH_ROAD, new_value); } var = vehicle.servint_ships type = SLE_UINT16 flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL -def = 360 -min = 5 -max = 800 +def = DEF_SERVINT_DAYS_SHIPS +min = MIN_SERVINT_PERCENT +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 @@ -122,9 +125,10 @@ post_cb = [](auto new_value) { UpdateServiceInterval(VEH_SHIP, new_value); } var = vehicle.servint_aircraft type = SLE_UINT16 flags = SF_PER_COMPANY | SF_GUI_0_IS_SPECIAL -def = 100 -min = 5 -max = 800 +def = DEF_SERVINT_DAYS_AIRCRAFT +min = MIN_SERVINT_PERCENT +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 From 39c6b3def1eb27a41f8eac20b7c275ede5e60101 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 8 Apr 2023 18:46:15 +0000 Subject: [PATCH 16/18] Update: Translations from eints english (au): 2 changes by krysclarke russian: 2 changes by Ln-Wolf --- 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 | 3 ++- 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 | 6 ++++-- 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 | 3 ++- 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 | 6 ++++-- 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, 132 insertions(+), 66 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 310c4648c8..e3a3724527 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -1698,6 +1698,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :As dit geaktive STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum maatskappyouderdom om aandele te verhandel: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Stel die minimum ouderdom van 'n maatskappy in vir ander om aandele by hulle te kan koop en verkoop. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Persentasie van wins om te betaal in voerder systeem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Persentasie wins wat gedeel word met die tussengangerstasies in oordragstelsels vir beter beheer oor die wins @@ -1830,7 +1831,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Daar is gereeld STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Spoed eenheid: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wys spoed in die eenheid wat gekies is -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Empiries (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metries (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 99894c2103..1311ab5fba 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -1564,6 +1564,7 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :مجمد STR_CONFIG_SETTING_ALLOW_SHARES :السماح بشراء حصص من الشركات الاخرى: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :عند التمكين ، السماح بشراء وبيع أسهم الشركة. ستكون الأسهم متاحة فقط للشركات التي بلغت سنًا معينة +###setting-zero-is-special STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :عند السحب ، ضع الإشارات كل: {STRING} @@ -1655,7 +1656,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :ضبط هذا STR_CONFIG_SETTING_SHORT_PATH_SATURATION :تشبع المسارات القصيرة قبل استخدام المسارات عالية القدرة: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :وحدات السرعة: {STRING} -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :إمبراطوري (ميل/ساعة) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :متري (كم / ساعة) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :متري (م / ثانية) diff --git a/src/lang/basque.txt b/src/lang/basque.txt index f679a3ec09..394885beeb 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -1610,6 +1610,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ALLOW_SHARES :Beste konpainien akzioak erostea baimendu: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Gaitua dagoenean, konpainiaren akzioak erostea eta saltzea baimendu. Konpainiak akzioak izateko gutxiengo adin batera iritsi beharko dira +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Elikadura sistemetan ordaindu beharreko irabazien ehunekoa: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Elikadura sistemetan eman beharreko irabazien ehunekoa, irabaziengain kontrol gehiago emanez @@ -1720,7 +1721,7 @@ STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Banaketen zehaz STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Abiadura unitateak: {STRING} -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Inperiala (milia/orduko) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrikoa (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 71cb617270..c7e74707c0 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -2015,6 +2015,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Калі ўкл STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мін. узрост кампаніі для выпуску акцыяў: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Мінімальны ўзрост, якога павінна дасягнуць кампанія для пачатку выпуску акцыяў, якімі змогуць гандляваць іншыя гульцы. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Адсотак даходу, якi налiчваецца пры частковай перавозцы: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Адсотак даходу, які налічваецца на прамежкавых адцінках у вялікіх сетках, даючы большы кантроль над даходамі. @@ -2149,7 +2150,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Пры наяў STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Сыстэма адзінак для хуткасьці: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Паказваць значэньні хуткасьці ў выбранай сыстэме адзінак -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :ангельскія (міль/г) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :мэтрычная (км/г) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :СІ (м/с) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 1989bb6204..7af39b8b38 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se ativado, per STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da companhia para trocar ações: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Defina a idade mínima de uma companhia para as outras estarem aptas a comprar e vender ações entre elas. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentagem paga em cada etapa em sistemas de baldeação: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentagem do lucro dado a cada estação de baldeação em sistemas de mais de um transporte, dando mais controle de lucro @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidade de velocidade: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Sempre que uma velocidade for exibida na interface do usuário, será exibida na unidade selecionada -###length 4 +###length 5 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) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 5dc58e1943..76022dc347 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1656,6 +1656,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Начална STR_CONFIG_SETTING_ALLOW_SHARES :Разреши купуване на акции от други компании: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ако тази опция бъде активирана, ще можете да купувате и продавате дялове на компании. Това ще бъде възможно единствено когато дадената компания достигне определена възраст +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от leg profit to pay in feeder systems: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент от приходите, който се плаща на intermediate legs in feeder systems, давайки ви повече контрол върху приходите @@ -1767,7 +1768,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Количес STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Единици за скорост: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Всеки път при показване на скорости, да бъдат изписвани в избраните мерни единици -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 18ccbb8167..99f8f6e0d3 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Permet comprar STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edat mínima de la companyia per negociar participacions: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Estableix l'edat mínima d'una companyia per tal que els altres competidors puguin comprar-ne o vendre accions. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentatge del benefici total a pagar en transferències: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentatge del benefici donat a branques intermediàries dins els sistemes, donant més control sobre els beneficis @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Sovint hi ha di STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unitats de velocitat: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quan es mostren velocitats a la interfície d'usuari, presenta-les en les unitats seleccionades -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Mètric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/chuvash.txt b/src/lang/chuvash.txt index 403d4c9831..4b4149f4d1 100644 --- a/src/lang/chuvash.txt +++ b/src/lang/chuvash.txt @@ -782,6 +782,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Тулли ###length 3 +###setting-zero-is-special @@ -825,7 +826,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Питӗ хӑв -###length 4 +###length 5 ###length 3 diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3e580b31cc..836720e999 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1814,6 +1814,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kada je uključ STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Najmanja starost tvrtke za trgovanje udjelima: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Odredite najmanju starost tvtke da bi drugi mogli kupovati i prodavati dionice. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Postotak dobiti za dionicu koji se plaća kod sustava feedera: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Postotak prihoda koji će biti predan srednjim dionicama prijevoza feeder sustavima, daje više kontrole nad prihodima @@ -1949,7 +1950,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Često postoji STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jedinice brzine: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Uvijek kada je brzina prikazana u korisničkom sučelju, prikaži je u odabranim jedinicama -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperijalni (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrički (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 56adf604c9..7a0792a94e 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -1895,6 +1895,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Pokud je zapnut STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimální stáří společnosti pro obchod s akciemi: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Určuje stáří společnosti, od kterého mohou ostatní společnosti kupovat a prodávat její akcie. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Podíl ze zisku při překládce: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentuální podíl příjmu, který je předán mezistanicím v překládacích systémech, předá větší kontrolu nad příjmem @@ -2040,7 +2041,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vzhledem k tomu STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jednotky rychlosti: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kdykoliv se rychlost zobrazí v uživatelském rozhraní, bude ve zvolených jednotkách -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiální (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrické (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index d609b52a11..995bcba77f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Hvis aktiveret, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Mindste selskabsalder for aktiehandel: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Indstil mindste alder på selskaber, før andre kan købe og sælge aktier i dem. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentdel af deloverskud som skal betales i hovedsystemer: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentdel af indkomst givet til de mellemliggende dele i hovedsystemer, giver mere kontrol over indkomst @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Der er ofte fle STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighedsenheder: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Når en hastighed er vist i brugergrænsefladen, så vis dem i de valgte enheder -###length 4 +###length 5 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) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3285d54ce0..1da18982f8 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wanneer ingesch STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimale leeftijd van bedrijf om aandelen te kunnen verhandelen: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Hiermee wordt de minimale leeftijd van een bedrijf ingesteld waarna anderen aandelen in dat bedrijf kunnen gaan kopen en verkopen. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage van routeopbrengst in overdrachtssysteem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage van het inkomen besteed aan de intermediaire delen in feedersystemen waardoor er meer controle over de inkomsten is @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Vaak zijn er me STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Snelheidseenheden: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wanneer een snelheid wordt weergegeven in het gebruikersscherm, gebruik dan de geselecteerde eenheden -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiaal (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index f2044c17e5..1b47a4928f 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, a STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set the minimum age of a company for others to be able to buy and sell shares from them. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of leg profit to pay in feeder systems: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage of income given to the intermediate legs in feeder systems, giving more control over the income @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently ther STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Speed units: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Whenever a speed is shown in the user interface, show it in the selected units -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) @@ -4584,6 +4585,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}The AIs STR_AI_CONFIG_HUMAN_PLAYER :Human player STR_AI_CONFIG_RANDOM_AI :Random AI STR_AI_CONFIG_NONE :(none) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}v{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Maximum no. competitors: {ORANGE}{COMMA} STR_AI_CONFIG_MOVE_UP :{BLACK}Move Up @@ -4597,7 +4599,7 @@ STR_AI_CONFIG_AI :{SILVER}AIs STR_AI_CONFIG_CHANGE_AI :{BLACK}Select AI STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Select Game Script -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Load another script. Ctrl+Click to show all available versions STR_AI_CONFIG_CONFIGURE :{BLACK}Configure STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configure the parameters of the Script diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 11d93e1e5b..281cc4b93e 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :When enabled, a STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum company age to trade shares: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set the minimum age of a company for others to be able to buy and sell shares from them. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentage of leg profit to pay in feeder systems: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentage of income given to the intermediate legs in feeder systems, giving more control over the income @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequently ther STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Speed units: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Whenever a speed is shown in the user interface, show it in the selected units -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index c9cd59fe90..ad26d147e0 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -1456,6 +1456,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Komenca jaro: { STR_CONFIG_SETTING_ALLOW_SHARES :Permesu aĉetadon de dividaĵoj en aliaj kompanioj: {STRING} +###setting-zero-is-special @@ -1519,7 +1520,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Komenca urbgran -###length 4 +###length 5 ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metriko (hp) diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 0ea20389f3..5b3f1ee73b 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -1864,6 +1864,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kui on aktiveer STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Ettevõtte vanuse alampiir aktsiakauplemiseks: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Määra alampiir ettevõtte vanusele, enne kui teised saavad selle aktsiaid osta ja müüa. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Protsent tuludest mis läheb 'kanna edasi' süsteemis alumistesse lülidesse: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Protsent tuludest mis antakse edasi 'kanna edasi' süsteemidele. Lubab täpsemalt jaotada kasumit erinevate harude vahel. @@ -2009,7 +2010,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kauba vedamisel STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Kiirusühikud: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Liideses näidatakse kiirust valitud mõõdustikus -###length 4 +###length 5 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) diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index c33caf91c0..b0f3dec43f 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -1603,6 +1603,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Byrjunar ár: { STR_CONFIG_SETTING_ALLOW_SHARES :Loyv keypi av partabrøvum frá øðrum fyritøkum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Um gilda, er loyvt at keypa og selja fyritøku partabrøv. Partabrøv verða einans tøk hjá fyritøkum ið hava rokki ein ávísan aldur +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentpartur av deilvinningi at gjalda í veitingar kervum: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Prosentpartur av inntøku ið verður útgoldi til millum liðini í veitara kervum (umskipan), gevur betri ræðið í inntøkuni @@ -1680,7 +1681,7 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Eingin -###length 4 +###length 5 ###length 3 diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 53bb64333d..373372d05d 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Mikäli käytö STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Yhtiön vähimmäisikä osakekaupoille: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Aseta yhtiölle vähimmäisikä, jonka jälkeen muut voivat ostaa ja myydä yhtiön osakkeita. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Syöttöjärjestelmään maksettavan tuoton osuus: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Osuus tuotosta, joka annetaan välittäjille syöttöjärjestelmissä @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Kahden aseman v STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Nopeuden yksikkö: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kun käyttöliittymässä näytetään nopeus, näytä se valittua yksikköä käyttäen -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Brittiläinen (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrinen (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/french.txt b/src/lang/french.txt index 42478487bf..7dae0cb8aa 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Lorsqu'il est a STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Âge minimum de la compagnie pour la vente d'actions{NBSP}: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Définir l'âge minimum qu'une compagnie doit avoir pour que les autres puissent acheter ou vendre ses parts. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Pourcentage du profit de branche à payer dans les systèmes multimodaux{NBSP}: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Pourcentage du profit donné aux branches intermédiaires dans les systèmes multimodaux, donnant plus de contrôle sur les profits @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Il y a souvent STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unité de vitesse{NBSP}: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quand une vitesse est affichée dans l'interface utilisateur, utiliser l'unité sélectionnée -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Impérial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Métrique (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index 6d765171ff..a131730b8d 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -1679,6 +1679,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ALLOW_SHARES :Stea it keapjen fan oandielen ta: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimale leeftiid fan it bedriuw om oandielen te hanneljen: {STRING} +###setting-zero-is-special STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :By slepe, pleats seinen eltse: {STRING} @@ -1778,7 +1779,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Gauris binne de STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Faasje-ienheid: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Wannear't in faasje sichtber is yn de interface de selektearre ienheid brûke -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Ymperiaal (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrysk (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index ff92ba0ff6..4cc506f957 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1871,6 +1871,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Bliadhna tòise STR_CONFIG_SETTING_ALLOW_SHARES :Ceadaich gun tèid stoca a cheannach bho chompanaidhean eile: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ma tha seo air, ’s urrainn dhut stocan chompanaidhean a cheannach is a reic. Cha bhi stoca ri làimh ach aig companaidhean aig a bheil aois shònraichte +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :A' cheudad dhen phrothaid a gheibh carbadan le tar-aiseag carago: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :A' cheudad dhen phrothaid a gheibh carbadan airson na slighe a shiubhlas iad nuair a nì iad tar-aiseag. Bheir seo barrachd smachd air an teachd a-steach dhut @@ -1999,7 +2000,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Gu tric, tha io STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Aonadan luaiths: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Nuair a thèid luaths a shealltainn san eadar-aghaidh, seall e leis na h-aonadan a thagh thu -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Impireil (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Meatrach (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/galician.txt b/src/lang/galician.txt index c485a3327c..599e4a6c41 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cando se activa STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da compañía para compraventa de accións: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Establece a idade mínima dunha compañía para que outros poidan comprar e vender accións dela. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaxe do beneficio parcial a pagar en sistemas transitivos: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaxe dos beneficios asignados ás partes intermedias da ruta en sistemas transitivos, dando un maior control sobre os ingresos @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Cando unha velocidade apareza na interfaz de usuario, facelo nas unidades seleccionadas -###length 4 +###length 5 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) diff --git a/src/lang/german.txt b/src/lang/german.txt index 074ee9afdc..8302533c33 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Erlaube das Kau STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimales Alter einer Firma, um an der Börse gehandelt zu werden: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Setze das minimale Alter einer Firma, ab dem Andere Firmenanteile dieser Firma kaufen und verkaufen können. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prozentsatz des Profits für Teilstrecken: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Um das Einkommen der einzelnen Fahrzeuge einer Lieferkette ungefähr abschätzen zu können, wird vom Transporterlös bei Ablieferung einer Fracht der gewählte Prozentsatz den Zulieferfahrzeugen zugeschlagen @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Häufig gibt es STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Geschwindigkeitseinheit: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Immer wenn die Geschwindigkeit angezeigt wird, sie in den gewählten Einheiten anzeigen -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 3d80085a83..958b6fed27 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -1912,6 +1912,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Όταν είν STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Ελάχιστη ηλικία εταιρίας για συναλλαγή μετοχών: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Ορίστε την ελάχιστη ηλικία μίας εταιρίας για να μπορούν άλλοι να αγοράσουν ή να πουλήσουν μετοχές από αυτές. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Το ποσοστό κέρδους από το σκέλος μεταφοράς στα συστήματα τροφοδότησης: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Το ποσοστό του εισοδήματος που δίνεται στα ενδιάμεσα σκέλη των συστημάτων τροφοδότησης, δίνοντας μεγαλύτερο έλεγχο στο εισόδημα @@ -2057,7 +2058,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Συχνά υπ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Μονάδες μέτρησης ταχύτητας: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Όποτε εμφανίζεται μια ταχύτητα στη διεπαφή χρήστη, να εμφανίζεται στην επιλεγμένη μονάδα -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Αυτοκρατορικό (μίλια/ώρα) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Μετρικό (χλμ/ώρα) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 7ec05cd2f0..20011d2666 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -1715,6 +1715,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES :אפשר קני STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :כאשר מאופשר, מתיר קנייה ומכירה של מניות של חברות. מניות יהיו זמינות רק עבור חברות המגיעות לגיל מסוים STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :גיל מינימלי לחברה לסחור במניותיה: {STRING} +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :אחוז הרווח מקטע נסיעה לתשלום במערכות הזנה: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :אחוז הרווח הניתן לקטעי ביניים במערכות הזנה, דבר הנותן שליטה מוגברת על ההכנסות @@ -1848,7 +1849,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :לעיתים ק STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :יחידות מהירות: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :כאשר מוצגת מהירות השתמש ביחידות הנבחרות -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :בריטית (מייל לשעה) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :מטרי (קמ"ש) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :בינלאומית (מטר לשניה) diff --git a/src/lang/hindi.txt b/src/lang/hindi.txt index 79ab1757cf..387093a538 100644 --- a/src/lang/hindi.txt +++ b/src/lang/hindi.txt @@ -546,6 +546,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###length 3 +###setting-zero-is-special @@ -585,7 +586,7 @@ STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :२x -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :अंतर्राष्ट्रीय मानक (m/s) ###length 3 diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 69ada0a6e1..7a84ceef57 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -1870,6 +1870,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Bekapcsolva eng STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Vállalatok minimális életkora részvénykibocsátáshoz: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Egy vállalatnak legalább ennyi évesnek kell lennie ahhoz, hogy más vállalatok kereskedhessenek a részvényeivel. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Ráhordó rendszereknek kifizetett profitszázalék: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :A bevételek százaléka, mely a közbenső szállítóknak, ráhordó járatoknak kerül kifizetésre, nagyobb ellenőrzést adva a bevétel felett @@ -2015,7 +2016,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Gyakran több STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Sebesség mértékegysége: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :A sebességértékek a kiválasztott mértékegységben fognak megjelenni a felhasználói felületen -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Angolszász (mi/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrikus (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 80ddcfd854..c4f274dde2 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -1602,6 +1602,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Upphafsár: {ST STR_CONFIG_SETTING_ALLOW_SHARES :Leyfa hlutabréfakaup í öðrum fyrirtækjum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ef þessi stilling er virk er hægt að kaupa og selja hlutabréf í fyrirtækjum. Hlutabréf eru aðeins aðgengileg fyrir fyrirtæki sem hafa náð ákveðnum aldri +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Hlutfall hagnaðar sem greiðist til tengiþjónustu: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Hlutfall hagnaðar sem greiðist til tengiþjónustu, farartækja sem eru milliliðir. Gefur meiri stjórn á tekjunum @@ -1705,7 +1706,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Meðalstærð b -###length 4 +###length 5 ###length 3 diff --git a/src/lang/ido.txt b/src/lang/ido.txt index 7c77b14082..b2422ef37d 100644 --- a/src/lang/ido.txt +++ b/src/lang/ido.txt @@ -743,6 +743,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora ###length 3 +###setting-zero-is-special @@ -778,7 +779,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Violkolora -###length 4 +###length 5 ###length 3 diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 29e1bc03f6..f955ee9ff9 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -1806,6 +1806,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Jika diaktifkan STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Usia minimum perusahaan untuk memperdagangkan saham: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Set umur minimal perusahaan saat sahamnya dapat dibeli atau dijual. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Persentase keuntungan akhir dari sistem pengisi: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Persentase pendapatan yang diberikan dari sistem pengisi, memberikan lebih banyak kendali pendapatan @@ -1951,7 +1952,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Biasanya terdap STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Satuan kecepatan: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Apabila kecepatan ditampilkan di antarmuka, nyatakan di satuan yang dipilih -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mpj) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrik (km/j) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/d) diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 2cb09f69ee..b0abe30339 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -1767,6 +1767,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Má tá sé cum STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Aois íosta na gcuideachtaí le bheith in ann scaireanna a thrádáil: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Socraigh aois íosta na gcuideachtaí sula mbeidh daoine eile in ann scaireanna iontu a cheannach agus a dhíol. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :An céatadán den bhrabús a íocfar ar chuid den turas i gcórais fhriothálacha: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :An céatadán den bhrabús a thugtar as lastais a thabhairt cuid den bhealach i gcórais fhriothálacha, rud a fhágann go bhfuil tuilleadh smachta agat ar an ioncam @@ -1912,7 +1913,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Go minic bíonn STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Aonaid luais: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Aon áit a thaispeántar luas sa chomhéadan úsáideora, taispeain sna haonaid roghnaithe é -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Impiriúil (msu) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Méadrach (km/u) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/italian.txt b/src/lang/italian.txt index f8ef6cc384..9e4b5b142c 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -1843,6 +1843,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Se abilitata, c STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Età minima della compagnia per lo scambio delle sue azioni: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Imposta l'età minima di una compagnia affinchè sia possibile acquistarne o venderne le azioni. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentuale profitto da pagare per una tappa di trasferimento: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentuale di ricavi assegnata ai tratti intermedi di una catena di trasferimenti, in questo si conferisce un maggiore controllo sul reddito. @@ -1988,7 +1989,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :È frequente ch STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unità di velocità: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Seleziona le unità di misura da utilizzare per mostrare le velocità nell'interfaccia utente -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperiali (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metriche (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index c6bdc7d5d5..fc5ddb598e 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :有効にする STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :株式を取引するための最低会社年齢:{STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :他の人が彼らから株式を売買できるように、会社の最低年齢を設定します。 +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :区間払いの割合: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :転送を行う輸送網(フィーダーシステム)を構築した場合、中継地点までの輸送で総輸送費の何%を受け取れるかを設定します(転送時に予想される最終輸送費から仮に部分払いし、最終的に貨物が目的地に到着した時点で清算します)。転送元の輸送機器が赤字になるのを防ぎます @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :二つの停留 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度単位: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :ゲーム中の速度をいずれの単位系で表すか決定します -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :ヤード・ポンド法 (マイル時(mph)) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :メートル法 (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国際単位系 (m/s) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 27f6699573..630654847e 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :이 설정을 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :지분 거래를 허용할 최소 회사 나이: {STRING}년 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :지분을 사고 팔기 위해 필요한 회사의 최소 나이를 설정합니다. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :환승시 벌어들이는 중간 수익의 비율: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :더 많은 수익을 내기 위해, 수송 관계상 중간 구간에게 주어진 수익의 비율을 설정합니다. @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :종종 두 역 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :속력 단위: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :속력를 표시할 때 선택한 단위를 사용하여 나타냅니다. -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :야드파운드법 (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :미터법 (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :국제표준규격 (m/s) diff --git a/src/lang/latin.txt b/src/lang/latin.txt index a6d4dd8bcb..55368a8778 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1869,6 +1869,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Annus initii: { STR_CONFIG_SETTING_ALLOW_SHARES :Sinere mercari sortes societatum: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Sinere mercari sortes a societatibus. Sortes societatum satis aetatis modo mercari licet +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Centesimae partes lucri pendenda in translatione: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Centesimae lucri pars medietati data in systematibus transferendi, ut melius distribuatur lucrum vehiculorum @@ -2001,7 +2002,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequenter sunt STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unitates velocitatis: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quandocumque velocitas monstratur, monstrabitur his unitatibus electis -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Anglicae (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metricae (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index aa91285dd4..db7a8c08f3 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1810,6 +1810,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Iestatīt minimālo uzņēmuma vecums, lai citi varētu pirkt un pārdod to akcijas. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenti no kopējās peļņas, ko maksā tranzītstacijās: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procenti no ienākumiem, kas tiek doti starpposmiem padeves sistēmās, kas dod lielāku kontroli pār ienākumiem @@ -1955,7 +1956,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp di STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma mērvienības: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vai lietotāja saskarnē rāda ātrumu, rādīt norādītajās mērvienībās -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :impērijas, britu (jūdzes stundā) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriskās (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI, starptautiskās (m/s) diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index bc0d4c9a8e..3ab3f00afa 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1994,6 +1994,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Leisti pirkti b STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Mažiausias kompanijos amžius metais, kuomet bus leista prekiauti jos akcijomis: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Kompanijos akcijomis leidžiama prekiauti tik jai sulaukus tam tikro amžiaus +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Grynojo pelno dalis, mokama tiekėjų sistemoms: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Pelno dalis, tenkanti tarpinėms tiekėjų sistemoms @@ -2153,7 +2154,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Dažnai tarp dv STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Greičio vienetai: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vienetai, kuriais matuojamas greitis -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :imperiniai (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :metriniai (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 41519c74d5..9d1ca0db14 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wann ugeschalt, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimalt Firmenalter fir Aktien ze handelen: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Definéiert d'minimalt Alter vun enger Firma, befier anerer kënnen Undeeler un Aktien vun hier kafen. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prozentsaz vum Etappenprofit den am Feeder-System bezuelt gëtt: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Prozentsaz vum Akommes déi un d'Zwëschenetappen an engem Feeder-System gi ginn, wat méi Kontroll iwwert d'Akommes erméiglegt @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Oft gëtt et e STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Geschwindegkeetseenheeten: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Emmer wann eng Geschwindegkeet am Userinterface ugewisen gëtt, weis se an den ausgewielten Eenheeten un -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Britesch (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metresch (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/macedonian.txt b/src/lang/macedonian.txt index 43d929a57d..6f665df7ee 100644 --- a/src/lang/macedonian.txt +++ b/src/lang/macedonian.txt @@ -1070,6 +1070,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :целосна ###length 3 +###setting-zero-is-special @@ -1115,7 +1116,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x -###length 4 +###length 5 ###length 3 diff --git a/src/lang/malay.txt b/src/lang/malay.txt index d433ddbb82..5ac9a62cb5 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -1521,6 +1521,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Tahun permulaan STR_CONFIG_SETTING_ALLOW_SHARES :Benarkan membeli saham syarikat lain: {STRING} +###setting-zero-is-special @@ -1595,7 +1596,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Pengganda awal -###length 4 +###length 5 ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Sistem Imperial (kuasa kuda/hp) diff --git a/src/lang/maltese.txt b/src/lang/maltese.txt index 38120c61e5..d2d42383cf 100644 --- a/src/lang/maltese.txt +++ b/src/lang/maltese.txt @@ -674,6 +674,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz ###length 3 +###setting-zero-is-special @@ -709,7 +710,7 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ippermetti l-uz -###length 4 +###length 5 ###length 3 diff --git a/src/lang/marathi.txt b/src/lang/marathi.txt index fd9443d41c..129365581e 100644 --- a/src/lang/marathi.txt +++ b/src/lang/marathi.txt @@ -986,6 +986,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :सर्व ###length 3 +###setting-zero-is-special @@ -1022,7 +1023,7 @@ STR_CONFIG_SETTING_STATUSBAR_POS :स्टेट -###length 4 +###length 5 ###length 3 diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index fac2222279..79ba643032 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -1781,6 +1781,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Når aktivert, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimum alder på firmaet for å handle aksjer: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Sett minimum levetid for et selskap, før andre kan kjøpe og selge aksjer fra dem. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Prosentandel av etappe-overskudd 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 @@ -1926,7 +1927,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte er det fle STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenheter: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Når en hastighet vises i brukergrensesnittet, vise det i de valgte enheter -###length 4 +###length 5 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) diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index ce0625599f..78796c7015 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -1607,6 +1607,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Start spelet i STR_CONFIG_SETTING_ALLOW_SHARES :Tillet kjøp av aksjar i andre firma: {STRING} +###setting-zero-is-special STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ved trekking, plasser signal kvar: {STRING} @@ -1716,7 +1717,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofte er det fle STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Eining for fart: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Bruk vald eining for å vise fart -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Britisk eining (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisk (km/t) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/persian.txt b/src/lang/persian.txt index a91360515d..673f3bfe7c 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -1478,6 +1478,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :سال شروع STR_CONFIG_SETTING_ALLOW_SHARES :قابلیت خرید سهام بقیه شرکت‌ها: {STRING} +###setting-zero-is-special @@ -1551,7 +1552,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :مضرب ابت STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :واحدهای سرعت: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :هر زمان که سرعت در محیط بازی نمایش داده شود، آن را با واحد انتخاب شده نمایش بده -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :امپریال (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :متریک (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 9c4ba2f8e7..ace80e15c0 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2188,6 +2188,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kiedy włączon STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimalny wiek firmy pozwalający na handel udziałami: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Ustaw minimalny wiek firmy pozwalający innym kupować i sprzedawać jej akcje. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Podział przychodów w przypadku przeładunków: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Manipulowanie zrównoważeniem podziałów w łańcuchu dowozowym: przy 0% przychód zostanie zaksięgowany na konto wyłącznie ostatniego pojazdu w łańcuchu, wyższa wartość zwiększa zrównoważenie podziału @@ -2333,7 +2334,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Często istniej STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jednostki prędkości: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kiedy prędkość jest pokazywana w interfejsie użytkownika, wyświetl ją w wybranych jednostkach -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperialne (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metryczne (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 5ae46119b3..7fecb3bae0 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Quando ativo, p STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Idade mínima da empresa para negociar ações: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Definir a idade mínima de uma companhia a partir da qual outros jogadores poderão comprar ou vender ações da mesma. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentagem do lucro do serviço a pagar em trajectos de um transporte que alimenta outro transporte: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percentagem da receita dada a trajectos intermédios em sistemas em que um transporte alimenta outro, dando maior controlo sobre a receita @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frequentemente STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidade: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Quando uma velocidade é mostrada no interface de utilizador, mostrar na unidade selecionada -###length 4 +###length 5 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) diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 5c733f5d99..dcb8fdc52d 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Dacă este acti STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Vârsta minimă a companiilor pentru tranzacțiile cu acțiuni: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Stabilește vechimea minimă a unei companii, ca alții să-i poată tranzacționa acțiunile. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procentul din profitul pe secţiune care să fie plătit pentru alimentare: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentul din câştig care este oferit legăturilor intermediare pentru alimentare, oferind mai mult control asupra încasărilor @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Adesea, există STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unitate viteză: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Afişează viteza în interfaţă folosind unităţile selectate -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index b945b99a61..b48c687b98 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1959,6 +1959,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Разреша STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мин. возраст компании для выпуска акций: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Минимальный возраст, которого должна достичь компания для начала выпуска акций, которыми смогут торговать другие игроки. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент дохода, начисляемый при частичной перевозке: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент прибыли, начисляемый транспорту за частичную перевозку груза. @@ -2104,7 +2105,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :При нали STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Система единиц для скорости: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Показывать значения скорости в выбранной системе единиц -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :английская (миль/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :метрическая (км/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :СИ (м/с) @@ -4771,6 +4772,7 @@ STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}Моду STR_AI_CONFIG_HUMAN_PLAYER :Человек STR_AI_CONFIG_RANDOM_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_MOVE_UP :{BLACK}Вверх @@ -4784,7 +4786,7 @@ STR_AI_CONFIG_AI :{SILVER}ИИ STR_AI_CONFIG_CHANGE_AI :{BLACK}ИИ STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Игровой скрипт -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Загрузить другой скрипт +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Загрузить другой скрипт. Ctrl+щелчок - показать все доступные версии. STR_AI_CONFIG_CONFIGURE :{BLACK}Конфигурация STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Настроить параметры скрипта diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 5e8f262e94..ea61087285 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -2001,6 +2001,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ako je omoguće STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Najmanja starost preduzeća za trgovinu akcijama: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Podesi najmanju starost preduzeća da bi drugi mogli da trguju akcijama sa njom. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenat prihoda koji će biti predan srednjim dionicama prevoza u fider sustavima: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procenat prihoda koji će biti predan srednjim dionicama prevoza u fider sustavima, dajući više kontrole nad prihodima @@ -2146,7 +2147,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Često postoji STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Mere brzine: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kada brzina bude pokazana u interfejsu, pokaži u željenoj meri -###length 4 +###length 5 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) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 0c7b27a505..343ea67ef4 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :“打开”时 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :公司可发售股份的最小已存续年份数:{STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :设置公司可发售股份的最小已存续年份数。 +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :转运系统中支付的利润百分比 {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :设定在转运系统中支付给前一环节的收入百分比, 从而对收入有更多的控制权 @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :货物分配功 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度单位:{STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :在界面上以所选择的单位表示速度 -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :英制(英里/小时) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :公制(千米/小时) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :国际单位制(米/秒) diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 04dcfaa3cd..4788833852 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -1876,6 +1876,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ak je zapnuté, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimálny vek spoločnosti na obchodovanie s podielmi: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Určuje minimálny vek spoločnosti na to, aby od nej mohli ostatné spoločnosti kupovať a predavať podiely. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Percentáž zisku na zaplatenie podávacieho systému: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Percento príjmov dať na strednú ´nohu´ vo feeder systémoch, získate väčšiu kontrolu nad príjmami @@ -2021,7 +2022,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Často je viac STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Jednotky rýchlosti: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Vždy, keď sa zobrazí rýchlosť v užívateľskom rozhraní, zobrazí sa vo vybraných jednotkách -###length 4 +###length 5 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) diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 0484a7ebab..c9edbef303 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1821,6 +1821,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Začetno leto: STR_CONFIG_SETTING_ALLOW_SHARES :Dovoli kupovanje delnic od drugih podjetij: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Če je omogočeno, se lahko trguje z delnicami podjetij. Na voljo samo po določeni starosti podjetja. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procent osnovnega dobička za plačilo v sklade: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procent prihodkov vložen v srednje sklade, ki omogoča več kontrole nad prihodki. @@ -1950,7 +1951,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Pogosto je več STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Enote hitrosti: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Ko bo prikazana hitrost vozil na vmesniku, bodo uporabljene izbrane enote. -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Colsko (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrično (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 2282c597ff..1af71c2630 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Cuando se activ STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edad mínima de una empresa para comerciar con sus acciones: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Edad mínima que tiene que tener una empresa para poder comprar y vender sus acciones. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje del beneficio total a pagar en transferencias: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de los beneficios entregados a los transportes intermedios en sistemas de transferencias, dando un mayor control sobre el beneficio de cada vehículo @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Frecuentemente STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidad de velocidad: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Cada vez que se muestra una velocidad en la interfaz de usuario, se empleará la unidad seleccionada -###length 4 +###length 5 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) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 113d2dcf6c..48330a8a56 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Al activarse, s STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Edad mínima de la empresa para intercambiar acciones: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Establecer la edad mínima que debe tener una empresa para que otros puedan comprarle y venderle acciones. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Porcentaje de la utilidad total a pagar por transferencias de carga: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Porcentaje de utilidad cedida a los transportes intermedios en sistemas de transferencia de carga, dando un mayor control sobre la utilidad de cada vehículo @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Entre dos estac STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unidades de velocidad: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Cada vez que se muestre una velocidad en la interfaz de usuario, se emplearán las unidades elegidas -###length 4 +###length 5 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) diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index db38cd1117..8d92544efc 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :När det är ak STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Lägsta företagsålder för aktiehandel: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Ställ in den lägsta ålder från vilken ett företags aktier kan köpas och säljas av andra företag. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Inkomstprocent per etapp i matarsystem: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procentandel av inkomsten som ges till de mellanliggande etapperna i matarsystem. Ger mer kontroll över inkomsterna @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Ofta finns det STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hastighetsenhet: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Närhelst en hastighet visas i användargränssnittet, visa den i den valda enheten -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Brittisk (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrisk (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 9c9e2ebcff..052983d97c 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -1632,6 +1632,7 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :உறைந் STR_CONFIG_SETTING_ALLOW_SHARES :மற்ற நிறுவனங்களின் பங்குகளை வாங்குவதை அனுமதிக்கவும்: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :பங்குகள் பரிமாற்றத்திற்கு தேவையான குறைந்தபட்ச நிறுவன வயது: {STRING} +###setting-zero-is-special STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :இழுத்தால், சிக்னல்களை இடவும், ஒவ்வொறு: {STRING} @@ -1738,7 +1739,7 @@ STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :இதை 0 ஐ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :வேக அலகுகள்: {STRING} -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :இம்பீரியல் (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :மெட்ரிக் (கி.மீ/மணிநேரம்) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (மீ/நொடி) diff --git a/src/lang/thai.txt b/src/lang/thai.txt index bb7a3de485..9a3cd42ad0 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -1686,6 +1686,7 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :หากเศ STR_CONFIG_SETTING_ALLOW_SHARES :อนุญาตให้ซื้อหุ้นจากบริษัทอื่นได้: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :เมื่อเปิดการใช้งาน จะสามารถซื้่อชขายหุ้นระหว่างบริษัท จะสามารถซื้อขายหุ้นได้ต่อเมื่อบริษัทเปิดตัวมานานแล้วเท่านั้น +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :เปอเซนต์ของผลกำไรที่จะส่งเข้าสู่ระบบกระจายรายได้: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :เปอร์เซนต์ของรายได้ที่ส่งให้ฐานของระบบกระจายรายได้ ส่งผลต่อการควบคุมรายได้ทั้งหมด @@ -1820,7 +1821,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :ความถ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :หน่วยวัดความเร็ว: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :หน่วยวัดความเร็ว แสดงผลในหน้าต่างรายละเอียดยานพาหนะ -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :อิมพิเรียล (ไมล์ต่อชั่วโมง) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :เมตริก (กิโลเมตรต่อชั่วโมง) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :มาตรฐานสากล (เมตร/วินาที) diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 6fe2bc4a92..36ffe9cb30 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :啟用此選項 STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :容許公司買賣股票的最小年齡:{STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :設定容許公司買賣股票的最小年齡。 +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :轉運服務所得的收入百分比:{STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :設定進行轉運的車輛在卸載被轉運的貨物時,獲得的收入佔貨物總收入的百分比。此選項讓玩家更有效地控制收入分配方式。 @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :貨物分配功 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :速度單位:{STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :在界面上以所選擇的單位表示速度。 -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :英制(英里/小時) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :米制(公里/小時) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :國際單位(米/秒) diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 72db25c4a6..23fd6a0a2c 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -1809,6 +1809,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Etkinleştirild STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Hisse satmak için gerekli minimum şirket yaşı: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Bir şirketin hisselerinin satılabileceği ve diğer şirketlerin alabileceği minimum şirket yaşını belirleyin. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Besleme sistemlerinde, bölümlerden elde edilen kardan ödenecek yüzde: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Besleme sistemlerinde, sistemi oluşturan ara bölümlere verilen kar yüzdesi. Böylece kar miktarı üzerinde daha fazla kontrol elde edilmiş olur @@ -1954,7 +1955,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Sıklıkla iki STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Hız birimi: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Kullanıcı arayüzünde hız görüntülendiğinde, bunu seçili birimde göster. -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (İngiliz ölçü birimleri) (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrik (km/s) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (Uluslararası Ölçüm Sistemi) (m/s) diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 06c01ba668..e009e73b6c 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -1934,6 +1934,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :При вклю STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Мінімальний вік компанії для торгівлі акціями: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Встановіть мінімальний вік компанії, щоб інші могли купувати та продавати акції у них. +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Відсоток прибутку за часткове перевезення: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Налаштування проценту прибутку, що нараховується за часткове перевезення вантажу. За допомогою даної опції можна контролювати розподіл прибутків між учасниками багатоланкових перевезень. @@ -2079,7 +2080,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Часто мі STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Одиниці швидкості: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Показувати швидкості в таких одиницях -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Імперські (милі/год) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Метричні (км/год) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :СІ (м/с) diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index ae5db34ba4..49abf06991 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -1401,6 +1401,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :شروعاتی STR_CONFIG_SETTING_ALLOW_SHARES :دوسری کمپنیوں کے حصص خریدنے کی اجازت: {STRING} +###setting-zero-is-special @@ -1471,7 +1472,7 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :شہر کا ش -###length 4 +###length 5 ###length 3 diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 7b490dde35..6d10b93186 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -1808,6 +1808,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Nếu bật, ch STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Tuổi công ty tối thiểu để bán cổ phần: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Đặt số tuổi tối thiểu của công ty để cho các bên khác có thể mua và bán cổ phần +###setting-zero-is-special STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Tỉ lệ lợi tức cổ phiếu chi trả cho môi giới: {STRING} STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Tỉ lệ thu nhập cho mỗi trung gian trên hệ thống vận tải, cho phép điều chỉnh thu nhập @@ -1953,7 +1954,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Thường sẽ STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Đơn vị tốc độ: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Khi thể hiện tốc độ trên giao diện, thể hiện nó bằng đơn vị đã chọn. -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index b242620988..2af9336b26 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -1669,6 +1669,7 @@ STR_CONFIG_SETTING_STARTING_YEAR :Blwyddyn dechre STR_CONFIG_SETTING_ALLOW_SHARES :Caniatáu prynu cyfranddaliadau mewn cwmnïau eraill: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Pan fo wedi'i alluogi, fe ganiateir prynnu a gwerthu cyfrandalaidau cwmni. Rhaid i gwmni gyrraedd oed penodol cyn y daw eu cyfrandaliadau ar gael +###setting-zero-is-special 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 @@ -1797,7 +1798,7 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Yn aml mae mwy STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Unedau cyflymder: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Pan y dangosir cyflymder yn y rhyngwyneb defnyddiwr, ei ddangos yn yr unedau a ddewiswyd -###length 4 +###length 5 STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metrig (km/h) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) From 97bdf99239bcc369e6b2cd7cedca4431d9bf82c2 Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Sat, 8 Apr 2023 15:10:17 -0400 Subject: [PATCH 17/18] Codechange: Add a property to graph windows for whether to draw dates (#10608) --- src/graph_gui.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 792aee681a..edc9b88d05 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -181,11 +181,12 @@ protected: byte num_on_x_axis; byte num_vert_lines; - /* The starting month and year that values are plotted against. If month is - * 0xFF, use x_values_start and x_values_increment below instead. */ + /* The starting month and year that values are plotted against. */ byte month; Year year; + bool draw_dates = true; ///< Should we draw months and years on the time axis? + /* These values are used if the graph is being plotted against values * rather than the dates specified by month and year. */ uint16 x_values_start; @@ -299,7 +300,7 @@ protected: /* Rect r will be adjusted to contain just the graph, with labels being * placed outside the area. */ r.top += ScaleGUITrad(5) + GetCharacterHeight(FS_SMALL) / 2; - r.bottom -= (this->month == 0xFF ? 1 : 2) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4); + r.bottom -= (this->draw_dates ? 2 : 1) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4); r.left += ScaleGUITrad(9); r.right -= ScaleGUITrad(5); @@ -378,7 +379,7 @@ protected: } /* Draw x-axis labels and markings for graphs based on financial quarters and years. */ - if (this->month != 0xFF) { + if (this->draw_dates) { x = r.left; y = r.bottom + ScaleGUITrad(2); byte month = this->month; @@ -497,7 +498,7 @@ public: uint x_label_width = 0; /* Draw x-axis labels and markings for graphs based on financial quarters and years. */ - if (this->month != 0xFF) { + if (this->draw_dates) { byte month = this->month; Year year = this->year; for (int i = 0; i < this->num_on_x_axis; i++) { @@ -522,7 +523,7 @@ public: uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width; size->width = std::max(size->width, ScaleGUITrad(5) + y_label_width + this->num_on_x_axis * (x_label_width + ScaleGUITrad(5)) + ScaleGUITrad(9)); - size->height = std::max(size->height, ScaleGUITrad(5) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->month != 0xFF ? 3 : 1)) * FONT_HEIGHT_SMALL + ScaleGUITrad(4)); + size->height = std::max(size->height, ScaleGUITrad(5) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->draw_dates ? 3 : 1)) * FONT_HEIGHT_SMALL + ScaleGUITrad(4)); size->height = std::max(size->height, size->width / 3); } @@ -882,7 +883,7 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { { this->num_on_x_axis = 20; this->num_vert_lines = 20; - this->month = 0xFF; + this->draw_dates = false; this->x_values_start = 10; this->x_values_increment = 10; From 1321e48465745b27237e5718e18c8d2d5b32fbc0 Mon Sep 17 00:00:00 2001 From: Alberth289346 Date: Sun, 9 Apr 2023 13:52:04 +0200 Subject: [PATCH 18/18] Fix: Update top toolbar tooltips for added features. (#10616) --- src/lang/english.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index ccd5664f8a..09dad7f035 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -344,9 +344,9 @@ STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Open the ###length 31 STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pause game STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Fast forward the game -STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Options -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Save game, abandon game, exit -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Display map, extra viewport or list of signs +STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Options and settings +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Save, load or abandon game, exit program +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Display map, extra viewport, cargo flow or list of signs STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Display town directory STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Display subsidies STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Display list of company's stations @@ -354,9 +354,9 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Display STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Display general company information STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Display story book STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Display goal list -STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Display graphs +STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Display company graphs and cargo payment rates STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Display company league table -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Fund construction of new industry or list all industries +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Examine industries or fund construction of a new industry STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Display list of company's trains. Ctrl+Click toggles opening the group/vehicle list STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Display list of company's road vehicles. Ctrl+Click toggles opening the group/vehicle list STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Display list of company's ships. Ctrl+Click toggles opening the group/vehicle list @@ -370,8 +370,8 @@ STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Build sh STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Build airports STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Open the landscaping toolbar to raise/lower land, plant trees, etc. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Show sound/music window -STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Show last message/news report, show message options -STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Land area information, console, script debug, screenshots, about OpenTTD +STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Show last message/news report, messages history or delete all messages +STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Land area information, screenshot, about OpenTTD and developer tools STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Switch toolbars # Extra tooltips for the scenario editor toolbar