From f7bf8e2da9e580afc9c96180b91fa70a0e8053c2 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 10 Dec 2019 19:45:40 +0100 Subject: [PATCH 01/84] Update: Translations from eints german: 11 changes by mini1025 --- src/lang/german.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/lang/german.txt b/src/lang/german.txt index 6e6a94f021..60dc5a557a 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -994,6 +994,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Doppelt STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Vierfach +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Doppelt STR_GAME_OPTIONS_BASE_GRF :{BLACK}Basisgrafiken STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Zu benutzendes Set an Basisgrafiken auswählen @@ -1474,6 +1475,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :KI im Mehrspiel STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaube die Teilnahme von Computerspielern im Mehrspielermodus STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Rechenoperationen, bevor das Skript angehalten wird: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximale Anzahl Rechenschritte, die ein Skript in einer Runde zur Verfügung hat +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximaler Arbeitsspeicher pro Script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wie viel Arbeitsspeicher ein Script maximal benutzen darf bevor es terminiert wird. Diese Wert muss eventuell vergrößert werden für größere Maps. STR_CONFIG_SETTING_SERVINT_ISPERCENT :Wartungsintervalle in Prozent: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Lege fest, ob Fahrzeuge zur Wartung geschickt werden basierend auf der verstrichenen Zeit seit der letzten Wartung oder dem Absinken der Zuverlässigkeit auf einen gewissen Prozentsatz der maximalen Zuverlässigkeit des Fahrzeugtyps @@ -1576,6 +1579,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Erlaube Spieler STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verboten STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaubt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaubt, mit wählbarem Straßenbauplan +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Platzierung von Bäumen während des Spiels: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Lege das Ausmaß des zufälligen Baumwachstums während des Spiels fest. Dies kann Industrien wie die Sägemühle beeinflussen, welche auf nachwachsende Bäume angewiesen sind @@ -2418,6 +2422,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Straßen STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Zwischen Bau und Abriss der Straße umschalten STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Zwischen Bau und Abriss von Straßenbahngleisen umschalten +STR_ROAD_NAME_TRAM :Straßenbahngleis # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Ausrichtung Depot @@ -3079,6 +3084,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Stadt umbenenne # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Stadtverwaltung {TOWN} +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zeige Zone der Stadtverwaltung STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Bewertung der Transportfirma: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Verfügbare Maßnahmen: @@ -3345,6 +3351,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Keine - STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienamen - Klick auf den Namen zentriert Hauptansicht auf die Industrie. Strg+Klick öffnet neue Zusatzansicht zentriert auf die Industrie # Industry view @@ -3411,6 +3418,7 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungruppierte St STR_GROUP_DEFAULT_SHIPS :Ungruppierte Schiffe STR_GROUP_DEFAULT_AIRCRAFTS :Ungruppierte Flugzeuge +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Gruppen - Klick auf eine Gruppe zeigt Liste aller Fahrzeuge der Gruppe an STR_GROUP_CREATE_TOOLTIP :{BLACK}Neue Gruppe erstellen @@ -3459,6 +3467,7 @@ STR_PURCHASE_INFO_RELIABILITY :{BLACK}Max. Zuv STR_PURCHASE_INFO_COST :{BLACK}Kosten: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Gewicht: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} Geschw.: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Kosten: {GOLD}{CURRENCY_LONG}{BLACK} (Kosten der Umrüstung: {GOLD}{CURRENCY_LONG}{BLACK}) Geschwindigkeit: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazität: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Angetriebene Waggons: {GOLD}+{POWER}{BLACK} Gewicht: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Umrüstbar auf: {GOLD}{STRING} @@ -3649,6 +3658,7 @@ STR_REPLACE_ELRAIL_VEHICLES :elektrische Sch STR_REPLACE_MONORAIL_VEHICLES :Einschienenbahn STR_REPLACE_MAGLEV_VEHICLES :Magnetschwebebahn +STR_REPLACE_TRAM_VEHICLES :Straßenbahnfahrzeuge STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon-Entfernung: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Ursprüngliche Länge des Zugs beibehalten, indem (vorne beginnend) Waggons entfernt werden, falls das Ersetzen der Lokomotive den Zug verlängern würde @@ -4391,6 +4401,7 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Diese St STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Straßenbahngleise können hier nicht entfernt werden... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}...hier ist keine Straße STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}...hier ist kein Straßenbahngleis +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Straßenbahngleistyp kann hier nicht geändert werden... # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kanal kann hier nicht gebaut werden... From df2a19ec871c0c1ee96545323ebb90d2bc05eda3 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 16 Dec 2019 19:45:41 +0100 Subject: [PATCH 02/84] Update: Translations from eints german: 9 changes by planetmaker portuguese: 19 changes by mcbanhas --- src/lang/german.txt | 9 +++++++++ src/lang/portuguese.txt | 33 +++++++++++++++++++-------------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/lang/german.txt b/src/lang/german.txt index 60dc5a557a..57c30eaa1a 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -1178,6 +1178,7 @@ STR_CONFIG_SETTING_AUTOSLOPE :Landschaftsbau STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Erlaube Erdbauarbeiten unter Gebäuden oder Infrastruktur ohne sie zu entfernen STR_CONFIG_SETTING_CATCHMENT :Verschiedene Stationstypen haben unterschiedlich große Einzugsgebiete: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Wird diese Option eingeschaltet, besitzen unterschiedliche Stationsarten bzw. Flughäfen unterschiedlich große Einzugsgebiete +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Falls aktiv, können Industrien mit integrierter Haltestelle (wie Ölbohrtürme) auch von nahegelegenen Stationen der Spieler bedient werden. Falls inaktive, können diese Industrien ausschließlich mittels ihrer eigenen Stationen bedient werden. Die integrierten Stationen bedienen dabei keine anderen Industrien in der Nähe STR_CONFIG_SETTING_EXTRADYNAMITE :Entfernung von weiteren Straßen, Brücken usw. erlauben: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Erlaubt einfacheres Entfernen von städtischer Infrastruktur und Gebäuden STR_CONFIG_SETTING_TRAIN_LENGTH :Maximale Zuglänge: {STRING} @@ -1579,6 +1580,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Erlaube Spieler STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :Verboten STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaubt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaubt, mit wählbarem Straßenbauplan +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratisch (orginal) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Platzierung von Bäumen während des Spiels: {STRING} @@ -2081,6 +2083,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Trennen STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ist geschützt. Passwort eingeben: STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ist geschützt. Passwort eingeben: +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Teilnehmerliste # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Teilnehmerliste @@ -2422,6 +2425,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Straßen STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Zwischen Bau und Abriss der Straße umschalten STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Zwischen Bau und Abriss von Straßenbahngleisen umschalten +STR_ROAD_NAME_ROAD :Straße STR_ROAD_NAME_TRAM :Straßenbahngleis # Road depot construction window @@ -2609,6 +2613,7 @@ STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STR STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Gleistyp: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Höchstgeschwindigkeit Schiene: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Höchstgeschwindigkeit Straße: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Höchstgeschwindigkeit Straßenbahn: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Felsen @@ -2725,6 +2730,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Bilder/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Bilder/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Bilder/s +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! @@ -2740,6 +2746,7 @@ STR_FRAMERATE_DRAWING :{BLACK}Grafik-R STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK}Kartenansichten: STR_FRAMERATE_VIDEO :{BLACK}Videoausgabe: STR_FRAMERATE_SOUND :{BLACK}Sound-Abmischung: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Script: ############ End of leave-in-this-order ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Spielschleife @@ -3084,6 +3091,7 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Stadt umbenenne # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Stadtverwaltung {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zone STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Zeige Zone der Stadtverwaltung STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Bewertung der Transportfirma: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} @@ -3605,6 +3613,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Nachrich STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Wir haben {G "einen" "eine" "ein" ""} neue{G n "" s ""} {0:STRING} entwickelt.{}Besteht Interesse, {G 0 den die das die} {0:STRING} ein Jahr lang exklusiv zu nutzen, so dass wir die Funktionen testen können, bevor {G 0 er sie es sie} allgemein zur Verfügung gestellt {G 0 wird wird wird werden}? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :{G=w}Lokomotive +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Elektrifizierte Lokomotive STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :{G=w}Einschienenbahn STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :{G=w}Magnetschwebebahn diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 576a0abe2c..74fcb6d4e2 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -471,7 +471,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as ############ range for about menu starts STR_ABOUT_MENU_LAND_BLOCK_INFO :Informações do terreno STR_ABOUT_MENU_SEPARATOR : -STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/ocultar consola +STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/Ocultar consola STR_ABOUT_MENU_AI_DEBUG :Depuração da IA/Scripts de Jogo STR_ABOUT_MENU_SCREENSHOT :Captura de ecrã STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura com resolução máxima @@ -2260,7 +2260,7 @@ STR_CONTENT_NO_ZLIB_SUB :{WHITE}... não STR_CONTENT_TYPE_BASE_GRAPHICS :Gráficos base STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :IA -STR_CONTENT_TYPE_AI_LIBRARY :Livraria IA +STR_CONTENT_TYPE_AI_LIBRARY :Biblioteca IA STR_CONTENT_TYPE_SCENARIO :Cenário STR_CONTENT_TYPE_HEIGHTMAP :Mapa de alturas STR_CONTENT_TYPE_BASE_SOUNDS :Sons base @@ -2337,13 +2337,13 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construir Magle STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir linha férrea. Ctrl alterna a construção/remoção de linha férrea. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construir caminhos-de-ferro usando o modo automático. Ctrl alterna a construção/remoção de caminhos-de-ferro. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito ferroviário (para compra e manutenção de comboios). Shift alterna contruir/mostrar custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Converter linha em ponto de controlo. Ctrl permite juntar pontos de controlo. Shift alterna contruir/mostrar custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Converter linha em ponto de controlo. Ctrl permite juntar pontos de controlo. Shift alterna construir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl permite juntar estações. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinais ferroviários. Ctrl alterna entre sinais clássicos/luminosos{}Arrastar constrói sinais ao longo de uma linha recta de carris. Ctrl constrói sinais até a próxima junção ou sinal{}Ctrl+Clique alterna entre abrir a janela de selecção de sinais. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Alternar entre construir/remover linha férrea, sinais, pontos de passagem e estações. Fixar o Ctrl também remove a linha férrea de pontos de passagem e estações -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de linha. Shift alterna contruir/mostrar custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de linha. Shift alterna construir/mostrar custo estimado STR_RAIL_NAME_RAILROAD :Caminhos-de-ferro STR_RAIL_NAME_ELRAIL :Caminhos-de-ferro elétricos @@ -2351,7 +2351,7 @@ STR_RAIL_NAME_MONORAIL :Monocarril STR_RAIL_NAME_MAGLEV :Maglev # Rail depot construction window -STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito +STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Orientação do depósito STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Seleccionar a orientação do depósito # Rail waypoint construction window @@ -2383,12 +2383,12 @@ STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal Combinado (semáforo){}O sinal combinado funciona como um sinal de entrada e de saída. Este permite construir grandes "árvores" de pré-sinais. STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal (semáforo){}Os sinais permitem que vários comboios utilizem a mesma linha desde que consigam chegar aos seus destinos em segurança. Sinais normais podem ser passados no sentido contrário. STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (semáforo){}Os sinais permitem que vários comboios utilizem a mesma linha desde que consigam chegar aos seus destinos em segurança. Os comboios não podem passar no sentido oposto dos sinais. -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal Normal(eléctrico){}Este é o tipo mais básico de sinal, que só permite um comboio dentro da mesma linha ferroviária ao mesmo tempo. -STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (eléctrico){}Verde enquanto existir um ou mais sinais de saída verdes no seguimento da linha. De outro modo ficará vermelho. -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de Saída (eléctrico){}Funciona da mesma forma que o sinal normal mas é necessário para conseguir a cor correcta nos pré-sinais de entrada e combinado. -STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal Combinado (eléctrico){}O sinal combinado funciona simplesmente como um sinal de entrada e de saída. Este permite construir grandes "árvores" de pré-sinais +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal Normal(eléctrico){}Este é o tipo mais básico de sinal. Permite apenas a passagem de um comboio de cada vez dentro da mesma divisão de linha. +STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de entrada (eléctrico){}Apresenta-se verde enquanto existir um ou mais sinais de saída verdes no seguimento da linha. De outro modo ficará vermelho. +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de saída (eléctrico){}Funciona da mesma forma que o sinal normal, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. +STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal combinado (eléctrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal (eléctrico){}Os sinais permitem que vários comboios entrem na mesma linha ao mesmo tempo, desde que consigam chegar ao seu destino em segurança. Sinais padrão podem ser passados no sentido contrário. -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (eléctrico){}Um sinal de trajecto permite que mais de um comboio passe ao mesmo tempo um sinal se, o comboio conseguir reservar um caminho para onde posteriormente possa parar sem prejudicar o seguinte. Sinais de um único sentido não podem ser passados no sentido contrário. +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (eléctrico){}Um sinal de trajeto que permite que mais de um comboio passe simultaneamente uma divisão de linha, desde que consiga reservar um caminho para onde possa parar posteriormente sem prejudicar o seguinte. Os sinais de sentido único não podem ser cruzados no sentido contrário. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversão de Sinal{}Quando seleccionado, ao fazer clique num sinal existente este será convertido no tipo e variante de sinal seleccionado, Ctrl+clique irá comutar a variante existente. Shift+Clique mostra estimativa do custo de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância de arrasto de sinais STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Reduzir distância de arrasto de sinais @@ -2430,10 +2430,12 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Construir túnel para eléctricos. Shift alterna contruir/mostrar custo estimado STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Alternar entre construir/remover estradas STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar construir/remover linhas de eléctricos e sinais +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar tipo de estrada. Shift alterna construir/mostrar custo estimado +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar tipo de carril para eléctricos. Shift alterna construir/mostrar custo estimado # Road depot construction window -STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientação do Depósito +STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientação do depósito STR_BUILD_DEPOT_ROAD_ORIENTATION_SELECT_TOOLTIP :{BLACK}Seleccionar a orientação do depósito STR_BUILD_DEPOT_TRAM_ORIENTATION_CAPTION :{WHITE}Orientação do depósito para eléctricos STR_BUILD_DEPOT_TRAM_ORIENTATION_SELECT_TOOLTIP :{BLACK}Escolher a orientação do depósito de eléctricos @@ -2515,7 +2517,7 @@ STR_OBJECT_CLASS_TRNS :Transmissores STR_PLANT_TREE_CAPTION :{WHITE}Árvores STR_PLANT_TREE_TOOLTIP :{BLACK}Escolha um tipo de árvore para plantar. Se o quadrado já tiver uma árvore, serão adicionadas mais árvores de difrentes tipos independentemente do tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar árvores de tipo aleatório. Shift alterna contruir/mostrar custo estimado +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar árvores de tipo aleatório. Shift alterna construir/mostrar custo estimado STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno @@ -4406,6 +4408,7 @@ STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Tipo de STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Deverá remover a linha férrea primeiro STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Estrada de sentido único ou bloqueada STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Passagens de nível não são permitidas para este tipo de linha +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Passagens de nível não são permitidas para este tipo de estrada STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Não é possível construir sinais aqui... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Não é possível construir linha férrea aqui... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Não é possível remover linha férrea daqui... @@ -4425,6 +4428,8 @@ STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Não é STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Não é possível remover carris para eléctricos deste local... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não há estrada STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não há carris para eléctricos +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter aqui o tipo de estrada... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter aqui o tipo de carril para eléctricos... # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Não é possível construir canais aqui... @@ -4588,8 +4593,8 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Sons originais STR_BASESOUNDS_WIN_DESCRIPTION :Sons originais da edição Windows de Transport Tycoon Deluxe. STR_BASESOUNDS_NONE_DESCRIPTION :Um conjunto de sons vazio. STR_BASEMUSIC_WIN_DESCRIPTION :Música original da edição Windows de Transport Tycoon Deluxe. -STR_BASEMUSIC_DOS_DESCRIPTION :Música original da edição DOS do Transport Tycoon Deluxe. -STR_BASEMUSIC_TTO_DESCRIPTION :Música original da edição DOS do Transport Tycoon (Original/Editor de Mundo) +STR_BASEMUSIC_DOS_DESCRIPTION :Música original da edição DOS de Transport Tycoon Deluxe. +STR_BASEMUSIC_TTO_DESCRIPTION :Música original da edição DOS de Transport Tycoon (Original/Editor de Mundo) STR_BASEMUSIC_NONE_DESCRIPTION :Um conjunto de música vazio. ##id 0x2000 From 94cc0edb70f3bec44c2928274631c6a8804d1478 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 17 Dec 2019 19:45:38 +0100 Subject: [PATCH 03/84] Update: Translations from eints portuguese: 225 changes by mcbanhas --- src/lang/portuguese.txt | 425 +++++++++++++++++++++------------------- 1 file changed, 225 insertions(+), 200 deletions(-) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 74fcb6d4e2..d54eee69cd 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -50,13 +50,13 @@ STR_CARGO_PLURAL_RUBBER :Borracha STR_CARGO_PLURAL_SUGAR :Açúcar STR_CARGO_PLURAL_TOYS :Brinquedos STR_CARGO_PLURAL_CANDY :Doces -STR_CARGO_PLURAL_COLA :Cola +STR_CARGO_PLURAL_COLA :Bebida de cola STR_CARGO_PLURAL_COTTON_CANDY :Algodão Doce STR_CARGO_PLURAL_BUBBLES :Bolhas STR_CARGO_PLURAL_TOFFEE :Caramelo STR_CARGO_PLURAL_BATTERIES :Baterias STR_CARGO_PLURAL_PLASTIC :Plástico -STR_CARGO_PLURAL_FIZZY_DRINKS :Bebidas Gasosas +STR_CARGO_PLURAL_FIZZY_DRINKS :Refrigerantes # Singular cargo name STR_CARGO_SINGULAR_NOTHING : @@ -84,13 +84,13 @@ STR_CARGO_SINGULAR_RUBBER :Borracha STR_CARGO_SINGULAR_SUGAR :Açúcar STR_CARGO_SINGULAR_TOY :Brinquedos STR_CARGO_SINGULAR_CANDY :Doces -STR_CARGO_SINGULAR_COLA :Cola +STR_CARGO_SINGULAR_COLA :Bebida de cola STR_CARGO_SINGULAR_COTTON_CANDY :Algodão Doce STR_CARGO_SINGULAR_BUBBLE :Bolhas STR_CARGO_SINGULAR_TOFFEE :Caramelo STR_CARGO_SINGULAR_BATTERY :Baterias STR_CARGO_SINGULAR_PLASTIC :Plástico -STR_CARGO_SINGULAR_FIZZY_DRINK :Bebidas Gasosas +STR_CARGO_SINGULAR_FIZZY_DRINK :Refrigerantes # Quantity of cargo STR_QUANTITY_NOTHING : @@ -118,13 +118,13 @@ STR_QUANTITY_RUBBER :{VOLUME_LONG} d STR_QUANTITY_SUGAR :{WEIGHT_LONG} de açúcar STR_QUANTITY_TOYS :{COMMA} brinquedo{P "" s} STR_QUANTITY_SWEETS :{COMMA} saco{P "" s} de doces -STR_QUANTITY_COLA :{VOLUME_LONG} de cola +STR_QUANTITY_COLA :{VOLUME_LONG} de bebida de cola STR_QUANTITY_CANDYFLOSS :{WEIGHT_LONG} de algodão doce STR_QUANTITY_BUBBLES :{COMMA} bolha{P "" s} STR_QUANTITY_TOFFEE :{WEIGHT_LONG} de caramelo STR_QUANTITY_BATTERIES :{COMMA} pilha{P "" s} STR_QUANTITY_PLASTIC :{VOLUME_LONG} de plástico -STR_QUANTITY_FIZZY_DRINKS :{COMMA} bebida{P "" s} gasosa{P "" s} +STR_QUANTITY_FIZZY_DRINKS :{COMMA} refrigerante{P "" s} STR_QUANTITY_N_A :N/D # Two letter abbreviation of cargo name @@ -159,7 +159,7 @@ STR_ABBREV_BUBBLES :{TINY_FONT}BO STR_ABBREV_TOFFEE :{TINY_FONT}CM STR_ABBREV_BATTERIES :{TINY_FONT}BA STR_ABBREV_PLASTIC :{TINY_FONT}PL -STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}BG +STR_ABBREV_FIZZY_DRINKS :{TINY_FONT}RF STR_ABBREV_NONE :{TINY_FONT}NÃO STR_ABBREV_ALL :{TINY_FONT}TUDO @@ -172,14 +172,14 @@ STR_ITEMS :{COMMA} item{P STR_CRATES :{COMMA} caixa{P "" s} # Colours, do not shuffle -STR_COLOUR_DARK_BLUE :Azul Escuro -STR_COLOUR_PALE_GREEN :Verde Claro +STR_COLOUR_DARK_BLUE :Azul escuro +STR_COLOUR_PALE_GREEN :Verde claro STR_COLOUR_PINK :Rosa STR_COLOUR_YELLOW :Amarelo STR_COLOUR_RED :Vermelho -STR_COLOUR_LIGHT_BLUE :Azul Claro +STR_COLOUR_LIGHT_BLUE :Azul claro STR_COLOUR_GREEN :Verde -STR_COLOUR_DARK_GREEN :Verde Escuro +STR_COLOUR_DARK_GREEN :Verde escuro STR_COLOUR_BLUE :Azul STR_COLOUR_CREAM :Creme STR_COLOUR_MAUVE :Malva @@ -236,6 +236,7 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Seleccio STR_BUTTON_SORT_BY :{BLACK}Ordenar por STR_BUTTON_LOCATION :{BLACK}Localização STR_BUTTON_RENAME :{BLACK}Renomear +STR_BUTTON_CATCHMENT :{BLACK}Cobertura STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fechar janela STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título da janela - arraste isto para mover a janela @@ -331,13 +332,14 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Mostrar STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Financiar a construção de uma nova indústria STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Mostrar lista de comboios da empresa. Ctrl+Clique alterna entre abrir a lista de grupos/veículos STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Mostrar lista de veículos rodoviários da empresa. Ctrl+Clique alterna entre abrir a lista de grupos/veículos -STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Mostrar lista de barcos da empresa. Ctrl+Clique alterna entre abrir a lista de grupos/veículos +STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Mostrar lista de navios da empresa. Ctrl+Clique alterna entre abrir a lista de grupos/veículos STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Mostrar lista de aeronaves da empresa. Ctrl+Clique alterna entre abrir a lista de grupos/veículos STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Ampliar STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Reduzir STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Construir caminhos-de-ferro STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Construir estradas -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir docas para barcos +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Construir carris para elétricos +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Construir docas para navios STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Construir aeroportos STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abra a barra de modelação ambiental para elevar ou baixar terreno, plantar árvores, etc. STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Mostrar janela som/música @@ -357,6 +359,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Gerar te STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Gerar localidades STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Gerar indústrias STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Construir estradas +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Construção de carris para elétricos STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Plantar árvores. Shift alterna contruir/mostrar custo estimado STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Colocar sinais STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Colocar objecto. Shift alterna contruir/mostrar custo estimado @@ -433,8 +436,8 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Financiar nova ############ range ends here ############ range for railway construction menu starts -STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construir caminhos-de-ferro -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construir caminhos-de-ferro electrificados +STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de caminhos-de-ferro +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de caminhos-de-ferro eletrificados STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construir monocarril STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construir Maglev ############ range ends here @@ -445,11 +448,11 @@ STR_ROAD_MENU_TRAM_CONSTRUCTION :Construção de ############ range ends here ############ range for waterways construction menu starts -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de canais +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Construção de hidrovia ############ range ends here ############ range for airport construction menu starts -STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construir aeroporto +STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Construção de aeroportos ############ range ends here ############ range for landscaping menu starts @@ -472,16 +475,16 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Apagar todas as STR_ABOUT_MENU_LAND_BLOCK_INFO :Informações do terreno STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/Ocultar consola -STR_ABOUT_MENU_AI_DEBUG :Depuração da IA/Scripts de Jogo +STR_ABOUT_MENU_AI_DEBUG :Depuração da IA/Scripts de jogo STR_ABOUT_MENU_SCREENSHOT :Captura de ecrã STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura com resolução máxima STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura com resolução normal STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa -STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de fotograma +STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de fotogramas STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de gráficos STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Alternar as caixas envolventes -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ligar/Desligar coloração de blocos sujos +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ativar coloração de blocos sujos ############ range ends here ############ range for ordinal numbers used for the place in the highscore window @@ -626,7 +629,7 @@ STR_PERFORMANCE_DETAIL_MONEY :{BLACK}Dinheiro STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Empréstimo: STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Total: ############ End of order list -STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Número de veículos que lucraram no último ano. Isto inclui veículos rodoviários, comboios, barcos e aeronaves. +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP :{BLACK}Número de veículos que produziram lucro no último ano. Inclui veículos rodoviários, comboios, navios e aeronaves. STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Número de estações recentemente reparadas. Estações ferroviárias, paragens de autocarro, aeroportos são contabilizadas separadamente, mesmo se estiverem ligadas como uma só. STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP :{BLACK}O lucro do veículo com o rendimento menor (só são considerados veículos com mais de 2 anos) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Dinheiro conseguido no mês com os lucros mais baixos dos últimos 12 trimestres @@ -729,7 +732,7 @@ STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_VEHICLES :{TINY_FONT}{BLACK}Veículos STR_SMALLMAP_LEGENDA_TRAINS :{TINY_FONT}{BLACK}Comboios STR_SMALLMAP_LEGENDA_ROAD_VEHICLES :{TINY_FONT}{BLACK}Veículos Rodoviários -STR_SMALLMAP_LEGENDA_SHIPS :{TINY_FONT}{BLACK}Barcos +STR_SMALLMAP_LEGENDA_SHIPS :{TINY_FONT}{BLACK}Navios STR_SMALLMAP_LEGENDA_AIRCRAFT :{TINY_FONT}{BLACK}Aeronaves STR_SMALLMAP_LEGENDA_TRANSPORT_ROUTES :{TINY_FONT}{BLACK}Rotas de Transporte STR_SMALLMAP_LEGENDA_FOREST :{TINY_FONT}{BLACK}Floresta @@ -788,7 +791,7 @@ STR_NEWS_FIRST_BUS_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_TRUCK_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro camião chega a {STATION}! STR_NEWS_FIRST_PASSENGER_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro eléctrico de passageiros chega a {STATION}! STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro eléctrico de mercadorias chega a {STATION}! -STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro barco chega a {STATION}! +STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeiro navio chega a {STATION}! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira aeronave chega a {STATION}! STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Comboios!{}{COMMA} mortem numa explosão após a colisão! @@ -932,6 +935,9 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Lari Georgiano STR_GAME_OPTIONS_CURRENCY_IRR :Rial Iraniano (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Novo Rublo Russo (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Peso Mexicano (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :Novo dólar taiwanês (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Renminbi chinês (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Dólar de Hong Kong (HKD) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Veículos rodoviários @@ -1119,7 +1125,7 @@ STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Configurações STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoria: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringe a lista abaixo para mostrar apenas opções modificadas -STR_CONFIG_SETTING_RESTRICT_BASIC :Opções Básicas (mostra apenas definições importantes) +STR_CONFIG_SETTING_RESTRICT_BASIC :Opções básicas (mostrar apenas definições importantes) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avançado (mostra grande parte das definições) STR_CONFIG_SETTING_RESTRICT_ALL :Avançado (mostrar todas as definições, incluindo as estranhas) STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Opções com um valor diferente das de origem @@ -1230,7 +1236,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :Na direita STR_CONFIG_SETTING_SHOWFINANCES :Mostrar janela das finanças no fim do ano: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Se ativado, os pops up de finanças ao final de cada ano permitem fácil inspeção do estado financeiro da empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Novas ordens são 'sem parar' por predefinição: {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo parará em cada estação por que passe. Ao ligar esta configuração, passará sem parar por todas as estações parando apenas no destino final. Nota que isto só tem efeito para novas rotas. No entanto rotas existentes podem ser alteradas explicitamente para funcionarem assim também. +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Normalmente, um veículo para em cada estação por onde passa. Ao ativar esta configuração, um veículo irá passar por todas as estações no seu percurso, parando apenas no destino final. Esta opção só tem efeito para novas rotas, mas as rotas existentes podem ser alteradas para funcionarem de forma igual. STR_CONFIG_SETTING_STOP_LOCATION :Ordens novas do comboio param {STRING} da plataforma STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Local onde um combóio parará na plataforma por omissão. A opção 'extremo mais próximo' significa perto do ponto de entrada, 'meio' significa no meio da plataforma e 'extremo mais distante' significa o mais distante possível do ponto de entrada. Esta opção apenas afecta o valor por omissão para novas encomendas. Encomendas individuais podem utilizar qualquer uma das opções independentemente desta STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :no extremo perto @@ -1336,8 +1342,8 @@ STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Escolhe a distr STR_CONFIG_SETTING_TREE_PLACER_NONE :Nenhum STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Melhorada -STR_CONFIG_SETTING_ROAD_SIDE :Veículo rodoviários: {STRING} -STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolhe o lado de condução +STR_CONFIG_SETTING_ROAD_SIDE :Veículos rodoviários: {STRING} +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Escolher o lado de condução STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Rotação mapa de alt.: {STRING} STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Sentido anti-horário STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Sentido horário @@ -1381,7 +1387,7 @@ STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Desligado STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER :Velocidade da roda do rato no mapa: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Controlo de sensibilidade da roda de rolagem do rato STR_CONFIG_SETTING_OSK_ACTIVATION :Teclado no ecrã: {STRING} -STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Seleccione o método de abertura do teclado no ecran para escrita de texto em caixas usando apenas o rato. Esta opção é pensada para equipamentos pequenos sem teclado físico. +STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Selecione o método de abertura de teclado virtual para escrita de texto em caixas, usando apenas o cursor. Esta opção destina-se principalmente para equipamentos pequenos sem teclado físico. STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Desactivado STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Duplo clique STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Clique simples (quando em foco) @@ -1460,7 +1466,7 @@ STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Máximo de veí STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Número máximo de veículos de estrada que uma companhia pode ter STR_CONFIG_SETTING_MAX_AIRCRAFT :Máximo de aeronaves por empresa: {STRING} STR_CONFIG_SETTING_MAX_AIRCRAFT_HELPTEXT :Número máximo de aeronaves que uma companhia pode ter -STR_CONFIG_SETTING_MAX_SHIPS :Máximo de barcos por empresa: {STRING} +STR_CONFIG_SETTING_MAX_SHIPS :Máximo de navios por empresa: {STRING} STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Número máximo de navios que uma companhia pode ter STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Desactivar comboios para o computador: {STRING} @@ -1469,7 +1475,7 @@ STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Desactivar veí STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Activar esta preferência impossibilita a construção de veículos de estrada por um jogador controlado pelo computador STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Desactivar aeronaves para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activar esta preferência impossibilita a construção de aeronaves por um jogador controlado pelo computador -STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barcos para o computador: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar navios para o computador: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activar esta preferência impossibilita a construção de navios por um jogador controlado pelo computador STR_CONFIG_SETTING_AI_PROFILE :Perfil de preferências por omissão: {STRING} @@ -1482,6 +1488,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Permite IAs em STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite a jogadores controlados pelo computador a participação em jogos multi-jogador STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes antes de os scripts serem suspensos: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Número máximo de passos computacionais que um script pode executar num turno +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Definir o volume máximo de memória que pode ser utilizada por um script antes de este ser terminado. Para mapas maiores é possível que este parâmetro tenha de ser aumentado. STR_CONFIG_SETTING_SERVINT_ISPERCENT :Os intervalos de serviço são em percentagem: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Escolher se a manutenção de veículos é activada pelo tempo passado deste a última manutenção, ou pela fiabilidade abaixo de uma certa percentagem da fiabilidade máxima @@ -1496,8 +1503,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Definir o inter STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de serviço para navios por omissão: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Definir o intervalo de manutenção por omissão para novos navios, se não for configurado um intervalo de manutenção explícito para o veículo STR_CONFIG_SETTING_NOSERVICE :Não fazer manutenção quando não há avarias: {STRING} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando activo, os veículos não farão manutenção se não puderem avariar -STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar limites de velocidade para vagões: {STRING} +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Quando ativo, os veículos não farão manutenção se não puderem avariar +STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Ativar limites de velocidade para vagões: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Quando activo, usar também os limites de velocidade das carruagens para decidir a velocidade máxima de um comboio STR_CONFIG_SETTING_DISABLE_ELRAILS :Desactivar carris electrificados: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Activar esta preferência desactiva o requisito de electrificar carris para que composições eléctricas os possam utilizar @@ -1544,6 +1551,7 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activar economi STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Quando activa, a produção de indústrias muda frequentemente, em pequenos incrementos. Esta preferência não costuma ter efeito, se os tipos de indústria forem provenientes de um NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permite comprar acções de outras empresas: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Quando activo, permite a compra e venda de acções de companhias. As acções apenas estarão disponíveis quando a companhia atinge uma determinada idade. +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. 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 STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Ao arrastar, colocar sinais a cada: {STRING} @@ -1558,12 +1566,12 @@ STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar uma jan STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de farol padrão para construir: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de sinal a usar por omissão STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Sinais de bloqueio -STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Sinais de rota +STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Sinais de trajeto STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Sinais de sentido único STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Trocar tipos de faróis: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Mostrar uma janela para escolher o tipo de sinais a construir, em vez de escolher a rotação de sinais com +clique em sinais -STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Apenas sinais de bloqueio -STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Apenas sinais de rota +STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :Apenas sinais de bloco +STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :Apenas sinais de trajeto STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Todos STR_CONFIG_SETTING_TOWN_LAYOUT :Disposição de estradas para novas localidades: {STRING} @@ -1722,10 +1730,10 @@ STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS :Sistema de enca STR_CONFIG_SETTING_PATHFINDER_FOR_TRAINS_HELPTEXT :Sistema de encaminhar comboios STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES :Sistema de encaminhar veículos rodoviários: {STRING} STR_CONFIG_SETTING_PATHFINDER_FOR_ROAD_VEHICLES_HELPTEXT :Sistema de encaminhar veículos rodoviários -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Sistema de encaminhar barcos: {STRING} -STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Sistema de encaminhar barcos +STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS :Sistema de encaminhar navios: {STRING} +STR_CONFIG_SETTING_PATHFINDER_FOR_SHIPS_HELPTEXT :Sistema de encaminhar navios STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Inversão automática nos sinais: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os comboios invertam o sentido de marcha nos sinais caso estejam à espera muito tempo +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Permitir que os comboios invertam o sentido de marcha nos sinais, caso estejam à espera muito tempo STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Alterar valor @@ -1752,32 +1760,32 @@ STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Falha a # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} -STR_INTRO_NEW_GAME :{BLACK}Novo Jogo -STR_INTRO_LOAD_GAME :{BLACK}Abrir Jogo -STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar Cenário +STR_INTRO_NEW_GAME :{BLACK}Novo jogo +STR_INTRO_LOAD_GAME :{BLACK}Carregar jogo +STR_INTRO_PLAY_SCENARIO :{BLACK}Jogar cenário STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Jogar mapa de alturas -STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de Cenário +STR_INTRO_SCENARIO_EDITOR :{BLACK}Editor de cenário STR_INTRO_MULTIPLAYER :{BLACK}Multi-jogador -STR_INTRO_GAME_OPTIONS :{BLACK}Opções do Jogo -STR_INTRO_HIGHSCORE :{BLACK}Tabela de Classificações +STR_INTRO_GAME_OPTIONS :{BLACK}Opções de jogo +STR_INTRO_HIGHSCORE :{BLACK}Tabela de classificações STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Definições STR_INTRO_NEWGRF_SETTINGS :{BLACK}Definições NewGRF -STR_INTRO_ONLINE_CONTENT :{BLACK}Verificar Conteúdo Online -STR_INTRO_SCRIPT_SETTINGS :{BLACK}Definições de IA / Script de Jogo +STR_INTRO_ONLINE_CONTENT :{BLACK}Verificar conteúdo online +STR_INTRO_SCRIPT_SETTINGS :{BLACK}Definições de IA/Script de jogo STR_INTRO_QUIT :{BLACK}Sair STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Iniciar um novo jogo. Ctrl+Clique salta a configuração do mapa -STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Carregar um jogo gravado -STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar novo jogo, usando um mapa de alturas como paisagem +STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Carregar um jogo guardado +STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Iniciar novo jogo, usando um mapa de alturas como terreno STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Iniciar um novo jogo, utilizando um cenário personalizado guardado no disco STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Criar um cenário de jogo personalizado STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Começar um jogo multi-jogador -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Seleccionar cenário do estilo 'temperado' -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Seleccionar cenário do estilo 'subárctico' -STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Seleccionar cenário do estilo 'subtropical' -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Seleccionar cenário do estilo 'terra dos brinquedos' +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Selecionar terreno do estilo "temperado" +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Selecionar terreno do estilo "subárctico" +STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Selecionar terreno do estilo "subtropical" +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Selecionar terreno do estilo "terra dos brinquedos" STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Mostrar opções de jogo STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Mostrar tabela de classificações @@ -1817,13 +1825,13 @@ STR_CHEAT_MONEY :{LTBLUE}Aumenta STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Jogando como empresa: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Bulldozer mágico (destrói indústrias, objectos amovíveis etc.): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Os túneis poderão cruzar-se: {ORANGE}{STRING} -STR_CHEAT_NO_JETCRASH :{LTBLUE}Aviões a jacto não irão ter acidentes (frequentes) em aeroportos pequenos: {ORANGE}{STRING} +STR_CHEAT_NO_JETCRASH :{LTBLUE}Aviões a jato não irão ter acidentes (frequentes) em aeroportos pequenos: {ORANGE}{STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Editar altura máxima do mapa: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Editar altura máxima de montanhas no mapa STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Terreno temperado STR_CHEAT_SWITCH_CLIMATE_SUB_ARCTIC_LANDSCAPE :Terreno subárctico STR_CHEAT_SWITCH_CLIMATE_SUB_TROPICAL_LANDSCAPE :Terreno subtropical -STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Terreno 'Terra dos Brinquedos' +STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Terreno terra dos brinquedos STR_CHEAT_CHANGE_DATE :{LTBLUE}Alterar data: {ORANGE}{DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Alterar ano actual STR_CHEAT_SETUP_PROD :{LTBLUE}Activar modificação de valores de produção: {ORANGE}{STRING} @@ -1834,7 +1842,7 @@ STR_LIVERY_CAPTION :{WHITE}{COMPANY STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Exibir esquema de cores geral STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Exibir esquemas de cores dos comboios STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Exibir esquemas de cores dos veículos rodoviários -STR_LIVERY_SHIP_TOOLTIP :{BLACK}Exibir esquemas de cores dos barcos +STR_LIVERY_SHIP_TOOLTIP :{BLACK}Exibir esquemas de cores dos navios STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Exibir esquema de cores da aeronave STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Seleccione a cor primária para o veículo seleccionado. Ctrl+Clique vai usar esta cor para todos os esquemas STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Seleccione a cor secundária para o esquema seleccionado. Ctrl+Click afetará esta escolha para todos os esquemas @@ -1856,12 +1864,12 @@ STR_LIVERY_PASSENGER_WAGON_MAGLEV :Carruagem de Pa STR_LIVERY_FREIGHT_WAGON :Vagão de Carga STR_LIVERY_BUS :Autocarro STR_LIVERY_TRUCK :Veículo de Mercadorias -STR_LIVERY_PASSENGER_SHIP :Barco de Passageiros -STR_LIVERY_FREIGHT_SHIP :Barco Cargueiro +STR_LIVERY_PASSENGER_SHIP :Navio de passageiros +STR_LIVERY_FREIGHT_SHIP :Navio cargueiro STR_LIVERY_HELICOPTER :Helicóptero STR_LIVERY_SMALL_PLANE :Avião de Pequenas Dimensões STR_LIVERY_LARGE_PLANE :Avião de Grandes Dimensões -STR_LIVERY_PASSENGER_TRAM :Eléctrico de Passageiros +STR_LIVERY_PASSENGER_TRAM :Elétrico de passageiros STR_LIVERY_FREIGHT_TRAM :Eléctrico de Mercadorias # Face selection window @@ -2288,7 +2296,7 @@ STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Sim, obt STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Não, sair do OpenTTD # Transparency settings window -STR_TRANSPARENCY_CAPTION :{WHITE}Opções de Transparência +STR_TRANSPARENCY_CAPTION :{WHITE}Opções de transparência STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Comutar transparência para sinais. Ctrl+Clique para bloquear. STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Comutar transparência das árvores. Ctrl+Clique para bloquear. STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Comutar transparência das casas. Ctrl+Clique para bloquear. @@ -2329,8 +2337,8 @@ STR_JOIN_WAYPOINT_CAPTION :{WHITE}Juntar p STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Construir um ponto de controlo separado # Rail construction toolbar -STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construir caminhos-de-ferro -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construir caminhos-de-ferro electrificados +STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Construção de caminhos-de-ferro +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Construção de caminhos-de-ferro eletrificados STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Construir monocarril STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Construir Maglev @@ -2339,14 +2347,14 @@ STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Construi STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Construir depósito ferroviário (para compra e manutenção de comboios). Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Converter linha em ponto de controlo. Ctrl permite juntar pontos de controlo. Shift alterna construir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Construir estação ferroviária. Ctrl permite juntar estações. Shift alterna contruir/mostrar custo estimado -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinais ferroviários. Ctrl alterna entre sinais clássicos/luminosos{}Arrastar constrói sinais ao longo de uma linha recta de carris. Ctrl constrói sinais até a próxima junção ou sinal{}Ctrl+Clique alterna entre abrir a janela de selecção de sinais. Shift alterna contruir/mostrar custo estimado +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Construir sinais ferroviários. Ctrl alterna entre semáforos/sinais elétricos{}Arrastar constrói sinais ao longo de uma linha reta de carris. Ctrl constrói sinais até a próxima junção ou sinal{}Ctrl+Clique alterna entre abrir a janela de seleção de sinais. Shift alterna construir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Construir ponte ferroviária. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Construir túnel ferroviário. Shift alterna contruir/mostrar custo estimado STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Alternar entre construir/remover linha férrea, sinais, pontos de passagem e estações. Fixar o Ctrl também remove a linha férrea de pontos de passagem e estações STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Converter/Atualizar tipo de linha. Shift alterna construir/mostrar custo estimado STR_RAIL_NAME_RAILROAD :Caminhos-de-ferro -STR_RAIL_NAME_ELRAIL :Caminhos-de-ferro elétricos +STR_RAIL_NAME_ELRAIL :Caminhos-de-ferro elétrificados STR_RAIL_NAME_MONORAIL :Monocarril STR_RAIL_NAME_MAGLEV :Maglev @@ -2377,17 +2385,17 @@ STR_STATION_CLASS_WAYP :Pontos de passa # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Selecção de Sinal -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal Normal (semáforo){}Este é o tipo mais básico de sinal, que só permite um comboio dentro da mesma linha ferroviária ao mesmo tempo. -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de Entrada (semáforo){}Verde enquanto existir um ou mais sinais de saída verdes no seguimento da linha. Caso contrário, ficará vermelho -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de Saída (semáforo){}Funciona da mesma forma que o sinal normal mas é necessário para conseguir a cor correcta nos pré-sinais de entrada e combinado. -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal Combinado (semáforo){}O sinal combinado funciona como um sinal de entrada e de saída. Este permite construir grandes "árvores" de pré-sinais. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal (semáforo){}Os sinais permitem que vários comboios utilizem a mesma linha desde que consigam chegar aos seus destinos em segurança. Sinais normais podem ser passados no sentido contrário. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (semáforo){}Os sinais permitem que vários comboios utilizem a mesma linha desde que consigam chegar aos seus destinos em segurança. Os comboios não podem passar no sentido oposto dos sinais. +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Sinal de bloco (semáforo){}Este é o tipo mais básico de sinal. Permite apenas a passagem de um comboio dentro de um bloco de linha ao mesmo tempo. +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Sinal de entrada (semáforo){}Apresenta-se verde enquanto existir um ou mais sinais de saída verdes no seguimento da linha. Caso contrário, ficará vermelho. +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Sinal de saída (semáforo){}Funciona da mesma forma que o sinal de bloco, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Sinal combinado (semáforo){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite a construção de ramificações complexas de pré-sinais. +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Sinal de trajeto (semáforo){}Permite que vários comboios passem simultaneamente um bloco de linha, desde que consigam reservar um caminho seguro sem prejudicar o veículo seguinte. Os sinais de trajeto padrão podem ser cruzados no sentido contrário. +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (semáforo){}Funciona de maneira similar a um sinal de trajeto, mas não pode ser cruzado no sentido contrário. STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Sinal Normal(eléctrico){}Este é o tipo mais básico de sinal. Permite apenas a passagem de um comboio de cada vez dentro da mesma divisão de linha. STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Sinal de entrada (eléctrico){}Apresenta-se verde enquanto existir um ou mais sinais de saída verdes no seguimento da linha. De outro modo ficará vermelho. STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Sinal de saída (eléctrico){}Funciona da mesma forma que o sinal normal, mas é necessário para ativar a cor correta nos pré-sinais de entrada e combinado. STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Sinal combinado (eléctrico){}O sinal combinado funciona simultaneamente como um sinal de entrada e de saída. Isto permite construir ramificações complexas de pré-sinais. -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal (eléctrico){}Os sinais permitem que vários comboios entrem na mesma linha ao mesmo tempo, desde que consigam chegar ao seu destino em segurança. Sinais padrão podem ser passados no sentido contrário. +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Sinal de trajeto (elétrico){}Permite que vários comboios passem simultaneamente um bloco de linha, desde que consigam reservar um caminho seguro sem prejudicar o veículo seguinte. Os sinais de trajeto padrão podem ser cruzados no sentido contrário. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Sinal de sentido único (eléctrico){}Um sinal de trajeto que permite que mais de um comboio passe simultaneamente uma divisão de linha, desde que consiga reservar um caminho para onde possa parar posteriormente sem prejudicar o seguinte. Os sinais de sentido único não podem ser cruzados no sentido contrário. STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Conversão de Sinal{}Quando seleccionado, ao fazer clique num sinal existente este será convertido no tipo e variante de sinal seleccionado, Ctrl+clique irá comutar a variante existente. Shift+Clique mostra estimativa do custo de conversão STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distância de arrasto de sinais @@ -2411,8 +2419,8 @@ STR_BRIDGE_TUBULAR_SILICON :Tubular, Silíc # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construir Estradas -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de Eléctricos +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Construção de estradas +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Construção de eléctricos STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Construir estradas. Ctrl alterna a construção/remoção de estradas STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Construir secção de carris para eléctricos. Ctrl alterna a construção/remoção de carris para eléctricos. Shift alterna contruir/mostrar custo estimado STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construir estradas usando o modo automático. Ctrl alterna a construção/remoção de estradas. Shift alterna contruir/mostrar custo estimado @@ -2433,6 +2441,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Alternar STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Converter/Atualizar tipo de estrada. Shift alterna construir/mostrar custo estimado STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Converter/Atualizar tipo de carril para eléctricos. Shift alterna construir/mostrar custo estimado +STR_ROAD_NAME_ROAD :Estrada +STR_ROAD_NAME_TRAM :Carris para elétricos # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Orientação do depósito @@ -2451,11 +2461,11 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Orienta STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Seleccionar orientação da estação de eléctricos # Waterways toolbar (last two for SE only) -STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de Canais +STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Construção de hidrovia STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Canais STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construir canais. Shift alterna construção/estimativa de custos STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir diques. Shift alterna contruir/mostrar custo estimado -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito naval (para compra e manutenção de barcos). Shift alterna contruir/mostrar custo estimado +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito naval (para compra e manutenção de navio). Shift alterna contruir/mostrar custo estimado STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl permite juntar estações. Shift alterna contruir/mostar custo estimado STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Bóia de posição, que pode ser usada para marcar pontos de rota adicionais. Shift alterna contrução/mostra de custos estimados STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift alterna contruir/mostar custo estimado @@ -2498,10 +2508,10 @@ STR_STATION_BUILD_NOISE :{BLACK}Ruído g # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Terreno -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Baixa um canto da terra. Arrastando abaixa o primeiro canto selecionado e os níveis a área selecionada para a altura do canto novo. Ctrl selecciona a área na diagonal. Shift alterna construção/estimativa de custos -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar um canto da terra. Arrastando eleva o primeiro canto selecionado e os níveis a área selecionada para a altura do canto novo. Ctrl selecciona a área na diagonal. Shift alterna construção/estimativa de custos -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nívelar uma área de terra até a altura do primeiro canto selecionado. Ctrl selecciona a área na diagonal. Shift alterna construção/estimativa de custos -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Shift alterna construir/mostrar custo estimado +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Baixar terreno. Ao pressionar e arrastar o cursor, o primeiro ponto selecionado é rebaixado e o terreno da área selecionada é nivelado com a nova altura do primeiro ponto. Ctrl seleciona a área na diagonal. Shift mostra a estimativa de custos. +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Elevar terreno. Ao pressionar e arrastar o cursor, o primeiro ponto selecionado é elevado e o terreno da área selecionada é nivelado com a nova altura do primeiro ponto. Ctrl seleciona a área na diagonal. Shift mostra a estimativa de custos. +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Nívelar uma área de terreno até a altura do primeiro ponto selecionado. Ctrl selecciona a área na diagonal. Shift mostra a estimativa de custos. +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Comprar terreno para uso futuro. Shift mostra a estimativa de custos. # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Selecção de Objecto @@ -2518,7 +2528,7 @@ STR_PLANT_TREE_CAPTION :{WHITE}Árvores STR_PLANT_TREE_TOOLTIP :{BLACK}Escolha um tipo de árvore para plantar. Se o quadrado já tiver uma árvore, serão adicionadas mais árvores de difrentes tipos independentemente do tipo selecionado STR_TREES_RANDOM_TYPE :{BLACK}Árvores de tipo aleatório STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Colocar árvores de tipo aleatório. Shift alterna construir/mostrar custo estimado -STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar Aleatoriamente +STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Plantar aleatoriamente STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Plantar árvores aleatoriamente no terreno # Land generation window (SE) @@ -2608,8 +2618,8 @@ STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autorida STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Nenhum STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordenadas: {LTBLUE}{NUM} x {NUM} x {NUM} ({STRING}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construído: {LTBLUE}{DATE_LONG} -STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo de Estação: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de Estação: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Tipo de estação: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Tipo de aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nome do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do quadrado do aeroporto: {LTBLUE}{STRING} @@ -2617,14 +2627,17 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceite: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Tipo de carril: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Tipo de estrada: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tipo de elétrico: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Limite de velocidade da linha: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Limite de velocidade da estrada: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Limite de velocidade para elétricos: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Rochas -STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Terreno Irregular -STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Terreno Deserto -STR_LAI_CLEAR_DESCRIPTION_GRASS :Terreno de Prados +STR_LAI_CLEAR_DESCRIPTION_ROUGH_LAND :Terreno irregular +STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :Terreno deserto +STR_LAI_CLEAR_DESCRIPTION_GRASS :Prados STR_LAI_CLEAR_DESCRIPTION_FIELDS :Campos STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Neve STR_LAI_CLEAR_DESCRIPTION_DESERT :Deserto @@ -2664,7 +2677,7 @@ STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Linha de eléct STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (em construção) STR_LAI_TREE_NAME_TREES :Árvores -STR_LAI_TREE_NAME_RAINFOREST :Floresta Tropical +STR_LAI_TREE_NAME_RAINFOREST :Floresta tropical STR_LAI_TREE_NAME_CACTUS_PLANTS :Cactos STR_LAI_STATION_DESCRIPTION_RAILROAD_STATION :Estação ferroviária @@ -2728,6 +2741,7 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Factor d STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Quão rápido o jogo está a ser executado, comparado com a velocidade esperada na taxa de simulação normal. STR_FRAMERATE_CURRENT :{WHITE}Actual STR_FRAMERATE_AVERAGE :{WHITE}Média +STR_FRAMERATE_MEMORYUSE :{WHITE}Memória STR_FRAMERATE_DATA_POINTS :{BLACK}Dados baseados em {COMMA} medições STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms @@ -2735,6 +2749,7 @@ STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} fotograma/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} fotograma/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} fotograma/s +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! @@ -2759,7 +2774,7 @@ STR_FRAMETIME_CAPTION_GAMELOOP :Loop de jogo STR_FRAMETIME_CAPTION_GL_ECONOMY :Movimentação de carga STR_FRAMETIME_CAPTION_GL_TRAINS :Quantidade de atraso no percurso do Comboio STR_FRAMETIME_CAPTION_GL_ROADVEHS :Quantidade de atraso no percurso do veículo rodoviário -STR_FRAMETIME_CAPTION_GL_SHIPS :Quantidade de atraso no percurso do barco +STR_FRAMETIME_CAPTION_GL_SHIPS :Quantidade de atraso no percurso do navio STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Quantidade de atraso no percurso de Aeronave STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Quantidade de Atraso no Percurso Mundial STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Atraso no gráfico de ligação @@ -3248,7 +3263,7 @@ STR_CARGO_RATING_MEDIOCRE :Medíocre STR_CARGO_RATING_GOOD :Bom STR_CARGO_RATING_VERY_GOOD :Muito Bom STR_CARGO_RATING_EXCELLENT :Excelente -STR_CARGO_RATING_OUTSTANDING :Proeminente +STR_CARGO_RATING_OUTSTANDING :Excecional ############ range for rating ends STR_STATION_VIEW_CENTER_TOOLTIP :{BLACK}Centrar visualização na localização da estação. Ctrl+Clique abre um novo visualizador na localização da estação @@ -3257,7 +3272,7 @@ STR_STATION_VIEW_RENAME_TOOLTIP :{BLACK}Alterar STR_STATION_VIEW_SCHEDULED_TRAINS_TOOLTIP :{BLACK}Mostrar todos os comboios que têm esta estação nas ordens de serviço STR_STATION_VIEW_SCHEDULED_ROAD_VEHICLES_TOOLTIP :{BLACK}Mostrar todos os veículos rodoviários que têm esta estação nas ordens de serviço STR_STATION_VIEW_SCHEDULED_AIRCRAFT_TOOLTIP :{BLACK}Mostrar todas as aeronaves que têm esta estação nas ordens de serviço -STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Mostrar todos os barcos que têm esta estação nas ordens de serviço +STR_STATION_VIEW_SCHEDULED_SHIPS_TOOLTIP :{BLACK}Mostrar todos os navios que têm esta estação nas ordens de serviço STR_STATION_VIEW_RENAME_STATION_CAPTION :Alterar nome de estação/local de carga @@ -3282,18 +3297,18 @@ STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Novos Ve STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Circulação de Comboios STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Circulação de Veículos STR_FINANCES_SECTION_AIRCRAFT_RUNNING_COSTS :{GOLD}Circulação de Aeronaves -STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Circulação de Barcos +STR_FINANCES_SECTION_SHIP_RUNNING_COSTS :{GOLD}Circulação de navios STR_FINANCES_SECTION_PROPERTY_MAINTENANCE :{GOLD}Manutenção de Propriedades STR_FINANCES_SECTION_TRAIN_INCOME :{GOLD}Lucros dos Comboios -STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Lucros dos V. Rodoviários +STR_FINANCES_SECTION_ROAD_VEHICLE_INCOME :{GOLD}Lucros dos veículos rodoviários STR_FINANCES_SECTION_AIRCRAFT_INCOME :{GOLD}Lucros das Aeronaves -STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Lucros dos Barcos +STR_FINANCES_SECTION_SHIP_INCOME :{GOLD}Lucros dos navios STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Juros do Empréstimo STR_FINANCES_SECTION_OTHER :{GOLD}Outros STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} STR_FINANCES_TOTAL_CAPTION :{WHITE}Total: -STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanço Bancário +STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Balanço bancário STR_FINANCES_LOAN_TITLE :{WHITE}Empréstimo STR_FINANCES_MAX_LOAN :{WHITE}Empréstimo Máximo: {BLACK}{CURRENCY_LONG} STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} @@ -3313,7 +3328,7 @@ STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} comboio{P "" s} STR_COMPANY_VIEW_ROAD_VEHICLES :{WHITE}{COMMA} veículo{P "" s} rodoviário{P "" s} STR_COMPANY_VIEW_AIRCRAFT :{WHITE}{COMMA} aeronave{P "" s} -STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} barco{P "" s} +STR_COMPANY_VIEW_SHIPS :{WHITE}{COMMA} navio{P "" s} STR_COMPANY_VIEW_VEHICLES_NONE :{WHITE}Nenhum STR_COMPANY_VIEW_COMPANY_VALUE :{GOLD}Valor da empresa: {WHITE}{CURRENCY_LONG} STR_COMPANY_VIEW_SHARES_OWNED_BY :{WHITE}({COMMA}% propriedade de {COMPANY}) @@ -3334,7 +3349,7 @@ STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Reconstr STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Detalhes STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Ver contagens de infraestrutura detalhadas -STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nova Cara +STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Nova cara STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Seleccione uma nova cara para o presidente STR_COMPANY_VIEW_COLOUR_SCHEME_BUTTON :{BLACK}Cores STR_COMPANY_VIEW_COLOUR_SCHEME_TOOLTIP :{BLACK}Alterar cores dos veículos @@ -3344,9 +3359,9 @@ STR_COMPANY_VIEW_PRESIDENT_NAME_BUTTON :{BLACK}Nome do STR_COMPANY_VIEW_PRESIDENT_NAME_TOOLTIP :{BLACK}Alterar nome do presidente STR_COMPANY_VIEW_BUY_SHARE_BUTTON :{BLACK}Comprar 25% das acções -STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Vender 25% das acções +STR_COMPANY_VIEW_SELL_SHARE_BUTTON :{BLACK}Vender 25% das ações STR_COMPANY_VIEW_BUY_SHARE_TOOLTIP :{BLACK}Comprar 25% das acções nesta empresa. Shift+Clique mostra valor estimado sem comprar nenhuma acção -STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vender 25% das acções nesta empresa. Shift+Clique mostra valor estimado sem vender nenhuma acção +STR_COMPANY_VIEW_SELL_SHARE_TOOLTIP :{BLACK}Vender 25% das ações nesta empresa. Shift+Clique mostra valor estimado sem vender nenhuma ação STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Nome da Empresa STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Nome do Presidente @@ -3393,19 +3408,19 @@ STR_CONFIG_GAME_PRODUCTION_LEVEL :{WHITE}Mudar o # Vehicle lists STR_VEHICLE_LIST_TRAIN_CAPTION :{WHITE}{STRING} - {COMMA} Comboio{P "" s} STR_VEHICLE_LIST_ROAD_VEHICLE_CAPTION :{WHITE}{STRING} - {COMMA} Veículo{P "" s} Rodoviário{P "" s} -STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Barco{P "" s} +STR_VEHICLE_LIST_SHIP_CAPTION :{WHITE}{STRING} - {COMMA} Navio{P "" s} STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} - {COMMA} Aeronave{P "" s} STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Comboios - clique num comboio para informações STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Veículos rodoviários - clique num veículo para informações -STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Barcos - clique num barco para informações +STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Navios - clique num navio para informações STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Aeronaves - clique numa aeronave para informações STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Lucro deste ano: {CURRENCY_LONG} (último ano: {CURRENCY_LONG}) STR_VEHICLE_LIST_AVAILABLE_TRAINS :Comboios Disponíveis STR_VEHICLE_LIST_AVAILABLE_ROAD_VEHICLES :Veículos Disponíveis -STR_VEHICLE_LIST_AVAILABLE_SHIPS :Barcos Disponíveis +STR_VEHICLE_LIST_AVAILABLE_SHIPS :Navios disponíveis STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Aeronaves Disponíveis STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Ver lista de modelos disponíveis de locomotivas para este tipo de veículo. @@ -3427,12 +3442,12 @@ STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Ordens p # Group window STR_GROUP_ALL_TRAINS :Todos os Comboios STR_GROUP_ALL_ROAD_VEHICLES :Todos os veículos rodoviários -STR_GROUP_ALL_SHIPS :Todos os barcos +STR_GROUP_ALL_SHIPS :Todos os navios STR_GROUP_ALL_AIRCRAFTS :Todas as aeronaves STR_GROUP_DEFAULT_TRAINS :Comboios sem grupo STR_GROUP_DEFAULT_ROAD_VEHICLES :Veículos rodoviários sem grupo -STR_GROUP_DEFAULT_SHIPS :Barcos sem grupo +STR_GROUP_DEFAULT_SHIPS :Navios sem grupo STR_GROUP_DEFAULT_AIRCRAFTS :Aeronaves sem grupo STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) @@ -3463,12 +3478,14 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Novos Veículos STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Novos Veículos Monocarril STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Novos Veículos Maglev -STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos Veículos Rodoviários +STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Novos veículos rodoviários +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Novos elétricos ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Novos Veículos Ferroviários -STR_BUY_VEHICLE_SHIP_CAPTION :Novos Barcos -STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova Aeronave +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Novos veículos rodoviários +STR_BUY_VEHICLE_SHIP_CAPTION :Novos navios +STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Nova aeronave ############ range for vehicle availability ends STR_PURCHASE_INFO_COST_WEIGHT :{BLACK}Custo: {GOLD}{CURRENCY_LONG}{BLACK} Peso: {GOLD}{WEIGHT_SHORT} @@ -3502,24 +3519,24 @@ STR_BUY_VEHICLE_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Lista de STR_BUY_VEHICLE_SHIP_LIST_TOOLTIP :{BLACK}Lista de selecção de barcos. Clique num navio para informações. Ctrl+Clique para alternar/ocultar o tipo de barco STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Lista de aeronaves - clique na aeronave para informações -STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar Veículo -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar Barco -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar Aeronave +STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Comprar veículo +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Comprar veículo +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Comprar navio +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Comprar aeronave -STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Reconverter veiculo +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e reconverter veiculo STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Reconverter Veículo -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Converter Barco -STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e Adaptar Carga da Aeronave +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e converter navio +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Comprar e adaptar carga da aeronave STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo ferroviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar -STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar -STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar barco seleccionado. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar o veículo rodoviário selecionado. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar navio selecionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Comprar aeronave seleccionada. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter veículo ferroviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :Comprar e converter veículo rodoviário seleccionado. Shift+Clique mostra estimativa de custo, sem comprar -STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter barco seleccionado. Shift+Clique mostra estimativa de custo, sem comprar +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter navio seleccionado. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Comprar e converter aeronave seleccionada. Shift+Clique mostra estimativa de custo, sem comprar STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Renomear @@ -3529,7 +3546,7 @@ STR_BUY_VEHICLE_AIRCRAFT_RENAME_BUTTON :{BLACK}Renomear STR_BUY_VEHICLE_TRAIN_RENAME_TOOLTIP :{BLACK}Renomear tipo de veículo ferroviário STR_BUY_VEHICLE_ROAD_VEHICLE_RENAME_TOOLTIP :{BLACK}Renomear tipo de veículo rodoviário -STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Renomear tipo de barco +STR_BUY_VEHICLE_SHIP_RENAME_TOOLTIP :{BLACK}Renomear tipo de navio STR_BUY_VEHICLE_AIRCRAFT_RENAME_TOOLTIP :{BLACK}Renomear tipo de aeronave STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON :{BLACK}Esconder @@ -3544,12 +3561,12 @@ STR_BUY_VEHICLE_AIRCRAFT_SHOW_TOGGLE_BUTTON :{BLACK}Mostrar STR_BUY_VEHICLE_TRAIN_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Alternar mostrar/ocultar o tipo de veículo ferroviário STR_BUY_VEHICLE_ROAD_VEHICLE_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Alternar mostrar/ocultar o tipo de veículo rodoviário -STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Define mostrar/esconder tipo de barco +STR_BUY_VEHICLE_SHIP_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Definir mostrar/esconder tipo de navio STR_BUY_VEHICLE_AIRCRAFT_HIDE_SHOW_TOGGLE_TOOLTIP :{BLACK}Define mostrar/esconder tipo de aeronave STR_QUERY_RENAME_TRAIN_TYPE_CAPTION :{WHITE}Renomear tipo de veículo ferroviário STR_QUERY_RENAME_ROAD_VEHICLE_TYPE_CAPTION :{WHITE}Renomear tipo de veículo rodoviário -STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Renomear tipo de barco +STR_QUERY_RENAME_SHIP_TYPE_CAPTION :{WHITE}Renomear tipo de navio STR_QUERY_RENAME_AIRCRAFT_TYPE_CAPTION :{WHITE}Renomear tipo de aeronave # Depot window @@ -3565,44 +3582,44 @@ STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} STR_DEPOT_TRAIN_LIST_TOOLTIP :{BLACK}Comboios - arraste o veículo com o botão esquerdo do rato para adicionar/remover do comboio, clique com o botão direito do rato para informações. Fixe o Ctrl para fazer com que as duas funções se apliquem à seguinte cadeia STR_DEPOT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Veículos - faça clique direito num veículo para informações -STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Barcos - faça clique direito num barco para informações +STR_DEPOT_SHIP_LIST_TOOLTIP :{BLACK}Navios - faça clique direito num navio para informações STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Aeronave - faça clique direito na aeronave para informações STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Arraste o veículo ferroviário para aqui para o vender STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Arraste o veículo rodoviário para aqui para o vender -STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Arraste o barco para aqui para o vender +STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Arraste o navio para aqui para o vender STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Arraste a aeronave para aqui para a vender STR_DEPOT_DRAG_WHOLE_TRAIN_TO_SELL_TOOLTIP :{BLACK}Arrastar locomotiva para aqui para vender todo o comboio STR_DEPOT_SELL_ALL_BUTTON_TRAIN_TOOLTIP :{BLACK}Vender todos os comboios no depósito STR_DEPOT_SELL_ALL_BUTTON_ROAD_VEHICLE_TOOLTIP :{BLACK}Vender todos os veículos no depósito -STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Vender todos os barcos no depósito +STR_DEPOT_SELL_ALL_BUTTON_SHIP_TOOLTIP :{BLACK}Vender todos os navios no depósito STR_DEPOT_SELL_ALL_BUTTON_AIRCRAFT_TOOLTIP :{BLACK}Vender todas as aeronaves no hangar STR_DEPOT_AUTOREPLACE_TRAIN_TOOLTIP :{BLACK}Autosubstituir todos os comboios no depósito STR_DEPOT_AUTOREPLACE_ROAD_VEHICLE_TOOLTIP :{BLACK}Autosubstituir todos os veículos rodoviários no depósito -STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Autosubstituir todos os barcos no depósito +STR_DEPOT_AUTOREPLACE_SHIP_TOOLTIP :{BLACK}Autosubstituir todos os navios no depósito STR_DEPOT_AUTOREPLACE_AIRCRAFT_TOOLTIP :{BLACK}Autosubstituir todas as aeronaves no hangar STR_DEPOT_TRAIN_NEW_VEHICLES_BUTTON :{BLACK}Novos Veículos STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_BUTTON :{BLACK}Novos Veículos -STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Novos Barcos +STR_DEPOT_SHIP_NEW_VEHICLES_BUTTON :{BLACK}Novos navios STR_DEPOT_AIRCRAFT_NEW_VEHICLES_BUTTON :{BLACK}Nova Aeronave STR_DEPOT_TRAIN_NEW_VEHICLES_TOOLTIP :{BLACK}Comprar novo veículo ferroviário STR_DEPOT_ROAD_VEHICLE_NEW_VEHICLES_TOOLTIP :{BLACK}Comprar novo veículo rodoviário -STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Comprar novo barco +STR_DEPOT_SHIP_NEW_VEHICLES_TOOLTIP :{BLACK}Comprar novo navio STR_DEPOT_AIRCRAFT_NEW_VEHICLES_TOOLTIP :{BLACK}Comprar nova aeronave STR_DEPOT_CLONE_TRAIN :{BLACK}Clonar Comboio STR_DEPOT_CLONE_ROAD_VEHICLE :{BLACK}Clonar Veículo -STR_DEPOT_CLONE_SHIP :{BLACK}Clonar Barco +STR_DEPOT_CLONE_SHIP :{BLACK}Clonar navio STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Clonar Aeronave STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Esta acção comprará uma cópia de um comboio, incluindo todas as carruagens. Clique neste botão e, de seguida, num comboio que se encontre dentro ou fora do depósito. Ctrl+Clique irá partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Esta acção comprará uma cópia de um veículo rodoviário. Clique neste botão e, de seguida, num veículo que se encontre dentro ou fora de um depósito. Ctrl+Clique irá partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Esta acção comprará uma cópia de um barco. Clique neste botão e, de seguida, num barco que se encontre dentro ou fora do depósito. Ctrl+Clique irá partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Esta acção comprará uma cópia de um navio. Clique neste botão e, de seguida, num navio que se encontre dentro ou fora do depósito. Ctrl+Clique irá partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Esta acção comprará uma cópia de uma aeronave. Clique neste botão e, de seguida, numa aeronave que se encontre dentro ou fora do hangar. Ctrl+Clique ira partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização de um depósito ferroviário. Ctrl+Clique abre um novo visualizador na localização do depósito ferroviário @@ -3612,17 +3629,17 @@ STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Obter uma lista de todos os comboios em cujas ordens conste este depósito STR_DEPOT_VEHICLE_ORDER_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Obter uma lista de todos os veículos em cujas ordens conste este depósito -STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Obter uma lista de todos os barcos em cujas ordens conste este depósito +STR_DEPOT_VEHICLE_ORDER_LIST_SHIP_TOOLTIP :{BLACK}Obter uma lista de todos os navios em cujas ordens conste este depósito STR_DEPOT_VEHICLE_ORDER_LIST_AIRCRAFT_TOOLTIP :{BLACK}Obter uma lista de todas as aeronaves em cujas ordens conste um hangar deste aeroporto -STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os comboios no depósito -STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os veículos no depósito -STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para imobilizar todos os barcos no depósito +STR_DEPOT_MASS_STOP_DEPOT_TRAIN_TOOLTIP :{BLACK}Pressione o botão esquerdo do rato para imobilizar todos os comboios no depósito +STR_DEPOT_MASS_STOP_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Pressione o botão esquerdo do rato para imobilizar todos os veículos no depósito +STR_DEPOT_MASS_STOP_DEPOT_SHIP_TOOLTIP :{BLACK}Pressione o botão esquerdo do rato para imobilizar todos os navios no depósito STR_DEPOT_MASS_STOP_HANGAR_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para imobilizar todas as aeronaves no hangar STR_DEPOT_MASS_START_DEPOT_TRAIN_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para iniciar todos os comboios no depósito STR_DEPOT_MASS_START_DEPOT_ROAD_VEHICLE_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para iniciar todos os veículos rodoviários no depósito -STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para iniciar todos os barcos no depósito +STR_DEPOT_MASS_START_DEPOT_SHIP_TOOLTIP :{BLACK}Pressione o botão esquerdo do rato para iniciar todos os navios no depósito STR_DEPOT_MASS_START_HANGAR_TOOLTIP :{BLACK}Pressione botão esquerdo do rato para iniciar todas as aeronaves no hangar STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Está prestes a vender todos os veículos no depósito. Tem a certeza? @@ -3632,13 +3649,15 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Mensagem STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Projectámos um novo modelo de {STRING} - gostaria de ter um ano de exclusividade de uso deste veículo, de modo a que possamos avaliar o seu desempenho antes de o disponibilizar globalmente? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :locomotiva ferroviária +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :locomotiva de caminhos-de-ferro electrificados STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :locomotiva monocarril STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :locomotiva maglev STR_ENGINE_PREVIEW_ROAD_VEHICLE :veículo rodoviário +STR_ENGINE_PREVIEW_TRAM_VEHICLE :elétrico STR_ENGINE_PREVIEW_AIRCRAFT :aeronave -STR_ENGINE_PREVIEW_SHIP :barco +STR_ENGINE_PREVIEW_SHIP :navio STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER :{BLACK}Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade Máx.: {VELOCITY} Potência: {POWER}{}Custo de Circulação: {CURRENCY_LONG}/ano{}Capacidade: {CARGO_LONG} STR_ENGINE_PREVIEW_COST_WEIGHT_SPEED_POWER_MAX_TE :{BLACK}Custo: {CURRENCY_LONG} Peso: {WEIGHT_SHORT}{}Velocidade Máx.: {VELOCITY} Potência: {POWER} F.T. Máx.: {6:FORCE}{}Custo de Circulação: {4:CURRENCY_LONG}/ano{}Capacidade: {5:CARGO_LONG} @@ -3652,7 +3671,7 @@ STR_ENGINE_PREVIEW_COST_MAX_SPEED_TYPE_RANGE_CAP_RUNCOST :{BLACK}Custo: { STR_REPLACE_VEHICLES_WHITE :{WHITE}Substituir {STRING} - {STRING} STR_REPLACE_VEHICLE_TRAIN :Comboio STR_REPLACE_VEHICLE_ROAD_VEHICLE :Veículo rodoviário -STR_REPLACE_VEHICLE_SHIP :Barco +STR_REPLACE_VEHICLE_SHIP :Navio STR_REPLACE_VEHICLE_AIRCRAFT :Aeronave STR_REPLACE_VEHICLE_VEHICLES_IN_USE :{YELLOW}Veículos em utilização @@ -3677,14 +3696,18 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Alternar STR_REPLACE_ENGINES :Locomotivas STR_REPLACE_WAGONS :Vagões STR_REPLACE_ALL_RAILTYPE :Todos os veículos ferroviários +STR_REPLACE_ALL_ROADTYPE :Todos os veículos rodoviários -STR_REPLACE_HELP_RAILTYPE :{BLACK}Seleccione o tipo de carril para o qual deseja efectuar a substituição dos motores +STR_REPLACE_HELP_RAILTYPE :{BLACK}Selecione o tipo de carril para o qual deseja efectuar a substituição dos motores +STR_REPLACE_HELP_ROADTYPE :BLACK}Selecione o tipo de estrada para o qual deseja efectuar a substituição dos motores STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Exibe o tipo de motor que substituirá o que está seleccionado à esquerda, se algum STR_REPLACE_RAIL_VEHICLES :Comboios STR_REPLACE_ELRAIL_VEHICLES :Comboios eléctricos STR_REPLACE_MONORAIL_VEHICLES :Monocarris STR_REPLACE_MAGLEV_VEHICLES :Maglevs +STR_REPLACE_ROAD_VEHICLES :Veículos rodoviários +STR_REPLACE_TRAM_VEHICLES :Elétricos STR_REPLACE_REMOVE_WAGON :{BLACK}Remover vagões: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Forçar a substituição automática a manter o comprimento do comboio, removendo vagões (do início), nas situações em que a substituição da locomotiva pode resultar num comboio mais comprido. @@ -3694,42 +3717,42 @@ STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE STR_VEHICLE_VIEW_TRAIN_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização do comboio. Ctrl+Clique segue o comboio na visualização STR_VEHICLE_VIEW_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização do veículo. Ctrl+Clique segue o veículo na visualização -STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização do barco. Ctrl+Clique segue o barco na visualização +STR_VEHICLE_VIEW_SHIP_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização do navio. Ctrl+Clique segue o navio na visualização STR_VEHICLE_VIEW_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Centrar visualização na localização da aeronave. Ctrl+Clique segue a aeronave na visualização STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar comboio para o depósito STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar veículo para o depósito -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar barco para o depósito +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar navio para o depósito STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar aeronave para o hangar STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Esta acção comprará uma cópia do comboio, incluindo as carruagens. Ctrl+Clique irá partilhar as ordens.Shift+Clique Shift + Clique mostra estimativa de custo, sem comprar STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Esta acção comprará uma cópia do veículo. Ctrl+Clique para partilhar as ordens.Shift+Clique mostra estimativa de custo, sem comprar -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Esta acção comprará uma cópia do barco. Ctrl+Clique para partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Esta ação comprará uma cópia do navio. Ctrl+Clique para partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esta acção comprará uma cópia da aeronave. Ctrl+Clique para partilhar as ordens.Shift+Clique mostra estimativa de custo, sem comprar STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forçar comboio a prosseguir sem esperar pelo sinal -STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Converter comboio para um tipo de carga diferente -STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reconverter veículo para transportar outro tipo de carga -STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar barco para um tipo de carga diferente -STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Adaptar aeronave para um tipo de carga diferente +STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Converter comboio para transportar outro tipo de carga +STR_VEHICLE_VIEW_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Converter veículo para transportar outro tipo de carga +STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Converter navio para transportar outro tipo de carga +STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Converter aeronave para transportar outro tipo de carga STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Inverter direcção do comboio STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Forçar veículo a dar a volta STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do comboio. Ctrl+Clique para mostrar o horário do comboio STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do veículo. Ctrl+Clique para mostrar o horário do veículo -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do barco. Ctrl+Clique para mostrar o horário do barco +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Mostrar ordens do navio. Ctrl+Clique para mostrar o horário do navio STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Mostrar ordens da aeronave. Ctrl+Clique para mostrar o horário da aeronave STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do comboio STR_VEHICLE_VIEW_ROAD_VEHICLE_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do veículo rodoviário -STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do barco +STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes do navio STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Mostrar detalhes da aeronave STR_VEHICLE_VIEW_TRAIN_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa actual do comboio - clique aqui para iniciar/parar comboio. Ctrl+Clique para deslocar-se ao destino STR_VEHICLE_VIEW_ROAD_VEHICLE_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa actual do veículo - clique aqui para iniciar/parar veículo. Ctrl+Clique para deslocar-se ao destino -STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa actual do barco - clique aqui para iniciar/parar barco. Ctrl+Clique para deslocar-se ao destino +STR_VEHICLE_VIEW_SHIP_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa atual do navio - clique aqui para iniciar/parar navio. Ctrl+Clique para deslocar-se ao destino STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Tarefa actual da aeronave - clique aqui para iniciar/parar a aeronave. Ctrl+Clique para deslocar-se ao destino # Messages in the start stop button in the vehicle view @@ -3761,7 +3784,7 @@ STR_VEHICLE_NAME_BUTTON :{BLACK}Nome STR_VEHICLE_DETAILS_TRAIN_RENAME :{BLACK}Renomear comboio STR_VEHICLE_DETAILS_ROAD_VEHICLE_RENAME :{BLACK}Renomear veículo rodoviário -STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Renomear barco +STR_VEHICLE_DETAILS_SHIP_RENAME :{BLACK}Renomear navio STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Renomear aeronave STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Idade: {LTBLUE}{STRING}{BLACK} Custo de circulação: {LTBLUE}{CURRENCY_LONG}/ano @@ -3798,7 +3821,7 @@ STR_VEHICLE_DETAILS_PERCENT :Percentagem STR_QUERY_RENAME_TRAIN_CAPTION :{WHITE}Renomear comboio STR_QUERY_RENAME_ROAD_VEHICLE_CAPTION :{WHITE}Renomear veículo rodoviário -STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Renomear barco +STR_QUERY_RENAME_SHIP_CAPTION :{WHITE}Renomear navio STR_QUERY_RENAME_AIRCRAFT_CAPTION :{WHITE}Renomear aeronave # Extra buttons for train details windows @@ -3834,18 +3857,18 @@ STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Nova cap STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Selecionar os veículos a readaptar. Arrastando com o rato permite selecionar vários veículos. Clicando sobre um espaço vazio irá selecionar todo o veículo. Ctrl+Clique irá selecionar um veículo e composição STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Seleccionar tipo de carga do comboio -STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Seleccione o tipo de carga para o veículo -STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Seleccionar tipo de carga do barco +STR_REFIT_ROAD_VEHICLE_LIST_TOOLTIP :{BLACK}Selecione o tipo de carga para o veículo +STR_REFIT_SHIP_LIST_TOOLTIP :{BLACK}Selecionar tipo de carga do navio STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Seleccionar tipo de carga da aeronave STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Converter comboio STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Reconverter veículo -STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Adaptar barco +STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Adaptar navio STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Adaptar aeronave STR_REFIT_TRAIN_REFIT_TOOLTIP :{BLACK}Converter comboio para transportar a carga seleccionada STR_REFIT_ROAD_VEHICLE_REFIT_TOOLTIP :{BLACK}Reconverter veículo para transportar o tipo de carga seleccionado -STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar barco para transportar a carga seleccionada +STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Adaptar navio para transportar a carga selecionada STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Converter aeronave para transportar a carga seleccionada # Order view @@ -4002,7 +4025,7 @@ STR_ORDER_CONDITIONAL_UNCONDITIONAL :Saltar para ord STR_ORDER_CONDITIONAL_NUM :Saltar para ordem {COMMA} quando {STRING} {STRING} {COMMA} STR_ORDER_CONDITIONAL_TRUE_FALSE :Saltar para ordem {COMMA} quando {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Ordem Inválida) +STR_INVALID_ORDER :{RED} (Ordem inválida) # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Horário) @@ -4044,10 +4067,10 @@ STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Muda o e STR_TIMETABLE_CLEAR_TIME :{BLACK}Apagar Tempo STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Apagar o tempo que dura a ordem seleccionada -STR_TIMETABLE_CHANGE_SPEED :{BLACK}Alterar Limite de Velocidade +STR_TIMETABLE_CHANGE_SPEED :{BLACK}Alterar limite de velocidade STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Mudar a velocidade maxima durante a viagem da ordem selecionada -STR_TIMETABLE_CLEAR_SPEED :{BLACK}Apagar Limite de Velocidade +STR_TIMETABLE_CLEAR_SPEED :{BLACK}Remover limite de velocidade STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Limpar a velocidade maxima durante a viagem da ordem selecionada STR_TIMETABLE_RESET_LATENESS :{BLACK}Apagar Contador Atraso @@ -4074,14 +4097,14 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Seleccio # AI debug window -STR_AI_DEBUG :{WHITE}Depuração de IA/Script de Jogo +STR_AI_DEBUG :{WHITE}Depuração de IA/Script de jogo STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Nome do script STR_AI_DEBUG_SETTINGS :{BLACK}Definições STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Alterar as definições do script STR_AI_DEBUG_RELOAD :{BLACK}Recarregar IA STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Termina a IA, recarrega o script e reinicia a IA -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Activar/desactivar paragem quando o registo da IA for igual à string de paragem +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Ativar/Desativar paragem quando o registo da IA for igual à string de paragem STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Parar em: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Parar em STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Quando a mensagem do registo da IA for igual a esta string, o jogo é posto em pausa @@ -4090,33 +4113,33 @@ STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Alternar STR_AI_DEBUG_CONTINUE :{BLACK}Continuar STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Sair da pausa e continuar a IA STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Ver saída de depuração desta IA -STR_AI_GAME_SCRIPT :{BLACK}Script de Jogo -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifique o registo do Script de Jogo +STR_AI_GAME_SCRIPT :{BLACK}Script de jogo +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Verifique o registo do Script de jogo STR_ERROR_AI_NO_AI_FOUND :Não foi encontrada IA adequada para carregar.{}Esta IA é um pacote vazio e não fará nada.{}Pode descarregar várias IA através do sistema 'Conteúdo Online' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Houve um erro num script. Por favor reporte isto ao autor do script com uma imagem da janela Depuramento de IA/Scripts de Jogo. -STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela Depuração da IA/Scripts de Jogo está disponível apenas para o servidor +STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}A janela de Depuração de IA/Scripts de jogo está disponível apenas para o servidor # AI configuration window -STR_AI_CONFIG_CAPTION :{WHITE}Configuração IA / Script de Jogo -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O Script de Jogo que será carregado no próximo jogo +STR_AI_CONFIG_CAPTION :{WHITE}Configuração IA/Script de jogo +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}O Script de jogo que será carregado no próximo jogo STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}As IAs que serão carregadas no próximo jogo STR_AI_CONFIG_HUMAN_PLAYER :Jogador humano -STR_AI_CONFIG_RANDOM_AI :IA Aleatória +STR_AI_CONFIG_RANDOM_AI :IA aleatória STR_AI_CONFIG_NONE :(nenhum) -STR_AI_CONFIG_MOVE_UP :{BLACK}Mover para Cima +STR_AI_CONFIG_MOVE_UP :{BLACK}Mover para cima STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Move a IA seleccionada para cima -STR_AI_CONFIG_MOVE_DOWN :{BLACK}Mover para Baixo +STR_AI_CONFIG_MOVE_DOWN :{BLACK}Mover para baixo STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Move a IA seleccionada para baixo -STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de Jogo +STR_AI_CONFIG_GAMESCRIPT :{SILVER}Script de jogo STR_AI_CONFIG_AI :{SILVER}IAs STR_AI_CONFIG_CHANGE :{BLACK}Selecionar {STRING} STR_AI_CONFIG_CHANGE_NONE : STR_AI_CONFIG_CHANGE_AI :IA -STR_AI_CONFIG_CHANGE_GAMESCRIPT :Script de Jogo +STR_AI_CONFIG_CHANGE_GAMESCRIPT :Script de jogo STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Carregar outro script STR_AI_CONFIG_CONFIGURE :{BLACK}Configurar STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configurar os parâmetros do script @@ -4124,7 +4147,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Configur # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Disponível {STRING} STR_AI_LIST_CAPTION_AI :IAs -STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de Jogo +STR_AI_LIST_CAPTION_GAMESCRIPT :Scripts de jogo STR_AI_LIST_TOOLTIP :{BLACK}Clique para seleccionar um script STR_AI_LIST_AUTHOR :{LTBLUE}Autor: {ORANGE}{STRING} @@ -4139,7 +4162,7 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mud # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros STR_AI_SETTINGS_CAPTION_AI :IA -STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de Jogo +STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Script de jogo STR_AI_SETTINGS_CLOSE :{BLACK}Fechar STR_AI_SETTINGS_RESET :{BLACK}Repor STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} @@ -4185,9 +4208,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Lucro Es STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Gravação ainda em curso,{}por favor aguarde! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Falha ao guardar automaticamente STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Não é possível ler unidade -STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao Guardar Jogo{}{STRING} +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Falha ao guardar jogo{}{STRING} STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Não é possível eliminar ficheiro -STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao Abrir Jogo{}{STRING} +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Falha ao abrir jogo{}{STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Erro interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Ficheiro corrompido - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Jogo gravado numa versão mais recente do jogo @@ -4430,6 +4453,8 @@ STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... não STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... não há carris para eléctricos STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Não é possível converter aqui o tipo de estrada... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Não é possível converter aqui o tipo de carril para eléctricos... +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... estrada não-compatível +STR_ERROR_INCOMPATIBLE_TRAMWAY :Cisterna de bebida de cola # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Não é possível construir canais aqui... @@ -4490,47 +4515,47 @@ STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Impossí # Generic vehicle errors STR_ERROR_TRAIN_IN_THE_WAY :{WHITE}Comboio no caminho STR_ERROR_ROAD_VEHICLE_IN_THE_WAY :{WHITE}Veículo rodoviário no caminho -STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Barco no caminho +STR_ERROR_SHIP_IN_THE_WAY :{WHITE}Navio no caminho STR_ERROR_AIRCRAFT_IN_THE_WAY :{WHITE}Aeronave no caminho STR_ERROR_CAN_T_REFIT_TRAIN :{WHITE}Não é possível converter comboio... STR_ERROR_CAN_T_REFIT_ROAD_VEHICLE :{WHITE}Não é possível reconverter veículo -STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Não é possível adaptar barco... +STR_ERROR_CAN_T_REFIT_SHIP :{WHITE}Não é possível adaptar navio... STR_ERROR_CAN_T_REFIT_AIRCRAFT :{WHITE}Não é possível converter aeronave... STR_ERROR_CAN_T_RENAME_TRAIN :{WHITE}Não é possível renomear comboio... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE :{WHITE}Não é possível renomear veículo rodoviário... -STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Não é possível renomear barco... +STR_ERROR_CAN_T_RENAME_SHIP :{WHITE}Não é possível renomear navio... STR_ERROR_CAN_T_RENAME_AIRCRAFT :{WHITE}Não é possível renomear aeronave... STR_ERROR_CAN_T_STOP_START_TRAIN :{WHITE}Não é possível iniciar/parar comboio... STR_ERROR_CAN_T_STOP_START_ROAD_VEHICLE :{WHITE}Não é possível iniciar/parar veículo rodoviário... -STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Não é possível iniciar/parar barco... +STR_ERROR_CAN_T_STOP_START_SHIP :{WHITE}Não é possível iniciar/parar navio... STR_ERROR_CAN_T_STOP_START_AIRCRAFT :{WHITE}Não é possível iniciar/parar aeronave... STR_ERROR_CAN_T_SEND_TRAIN_TO_DEPOT :{WHITE}Não é possível mandar o comboio para o depósito... STR_ERROR_CAN_T_SEND_ROAD_VEHICLE_TO_DEPOT :{WHITE}Não é possível mandar o veículo para o depósito... -STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Não é possível mandar barco para o depósito... +STR_ERROR_CAN_T_SEND_SHIP_TO_DEPOT :{WHITE}Não é possível mandar navio para o depósito... STR_ERROR_CAN_T_SEND_AIRCRAFT_TO_HANGAR :{WHITE}Não é possível mandar aeronave para o hangar... STR_ERROR_CAN_T_BUY_TRAIN :{WHITE}Não é possível comprar veículo ferroviário... STR_ERROR_CAN_T_BUY_ROAD_VEHICLE :{WHITE}Não é possível comprar veículo rodoviário... -STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Não é possível comprar barco... +STR_ERROR_CAN_T_BUY_SHIP :{WHITE}Não é possível comprar navio... STR_ERROR_CAN_T_BUY_AIRCRAFT :{WHITE}Não é possível comprar aeronave... STR_ERROR_CAN_T_RENAME_TRAIN_TYPE :{WHITE}Não é possível renomear tipo de veículo ferroviário... STR_ERROR_CAN_T_RENAME_ROAD_VEHICLE_TYPE :{WHITE}Não é possível renomear tipo de veículo rodoviário... -STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Não é possível renomear tipo de barco... +STR_ERROR_CAN_T_RENAME_SHIP_TYPE :{WHITE}Não é possível renomear tipo de navio... STR_ERROR_CAN_T_RENAME_AIRCRAFT_TYPE :{WHITE}Não é possível renomear tipo de aeronave... STR_ERROR_CAN_T_SELL_TRAIN :{WHITE}Não é possível vender veículo ferroviário... STR_ERROR_CAN_T_SELL_ROAD_VEHICLE :{WHITE}Não é possível vender veículo rodoviário... -STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Não é possível vender barco... +STR_ERROR_CAN_T_SELL_SHIP :{WHITE}Não é possível vender navio... STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}Não é possível vender aeronave... STR_ERROR_RAIL_VEHICLE_NOT_AVAILABLE :{WHITE}Veículo não está disponível STR_ERROR_ROAD_VEHICLE_NOT_AVAILABLE :{WHITE}Veículo não está disponível -STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Barco não está disponível +STR_ERROR_SHIP_NOT_AVAILABLE :{WHITE}Navio não está disponível STR_ERROR_AIRCRAFT_NOT_AVAILABLE :{WHITE}Aeronave não está disponível STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}Existem demasiados veículos em jogo @@ -4664,11 +4689,11 @@ STR_INDUSTRY_NAME_LUMBER_MILL :{G=f}Serração STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :{G=f}Floresta de Algodão Doce STR_INDUSTRY_NAME_CANDY_FACTORY :{G=f}Fábrica de Doces STR_INDUSTRY_NAME_BATTERY_FARM :{G=m}Campo de Baterias -STR_INDUSTRY_NAME_COLA_WELLS :{G=mp}Poços de Cola +STR_INDUSTRY_NAME_COLA_WELLS :{G=mp}Poços de bebida de cola STR_INDUSTRY_NAME_TOY_SHOP :{G=f}Loja de Brinquedos STR_INDUSTRY_NAME_TOY_FACTORY :{G=f}Fábrica de Brinquedos STR_INDUSTRY_NAME_PLASTIC_FOUNTAINS :{G=fp}Fontes de Plástico -STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY :{G=f}Fábrica de Bebidas Gasosas +STR_INDUSTRY_NAME_FIZZY_DRINK_FACTORY :{G=f}Fábrica de refrigerantes STR_INDUSTRY_NAME_BUBBLE_GENERATOR :{G=m}Produtor de Bolhas STR_INDUSTRY_NAME_TOFFEE_QUARRY :{G=f}Exploração de Caramelo STR_INDUSTRY_NAME_SUGAR_MINE :{G=f}Mina de Açúcar @@ -4680,7 +4705,7 @@ STR_SV_EMPTY : STR_SV_UNNAMED :Sem nome STR_SV_TRAIN_NAME :Comboio {COMMA} STR_SV_ROAD_VEHICLE_NAME :Veículo Rodoviário {COMMA} -STR_SV_SHIP_NAME :Barco {COMMA} +STR_SV_SHIP_NAME :Navio {COMMA} STR_SV_AIRCRAFT_NAME :Aeronave {COMMA} STR_SV_STNAME :{STRING} @@ -4763,11 +4788,11 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Vagão de Açú STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Vagão de Algodão Doce STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Vagão de Caramelo STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Vagão de Bolhas -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Cisterna de Cola +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Cisterna de bebida de cola STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :Vagão de Doces STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Vagão de Brinquedos STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Vagão de Baterias -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Vagão de Bebidas Gasosas +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Vagão de refrigerantes STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Vagão de Plástico STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Eléctrico) @@ -4793,11 +4818,11 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Vagão de Açú STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Vagão de Algodão Doce STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Vagão de Caramelo STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Vagão de Bolhas -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Cisterna de Cola +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Cisterna de beibda de cola STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Vagão de Doces STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Vagão de Brinquedos STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Vagão de Baterias -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Vagão de Bebidas Gasosas +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Vagão de refrigerantes STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Vagão de Plástico STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Leviathan' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Cyclops' (Eléctrico) @@ -4825,11 +4850,11 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Vagão de Açú STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Vagão de Algodão Doce STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Vagão de Caramelo STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Vagão de Bolhas -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Cisterna de Cola +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Cisterna de bebida de cola STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Vagão de Doces STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Vagão de Brinquedos STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Vagão de Baterias -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Vagão de Bebidas Gasosas +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FIZZY_DRINK_TRUCK :Vagão de refrigerantes STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PLASTIC_TRUCK :Vagão de Plástico STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_REGAL_BUS :Autocarro MPS Regal STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_LEOPARD_BUS :Autocarro Hereford Leopard @@ -4892,9 +4917,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :Camião de Borr STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :Camião de Açúcar MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Camião de Açúcar Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Camião de Açúcar Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :Camião de Cola MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Camião de Cola Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Camião de Cola Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :Camião de bebida de cola MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Camião de bebida de cola Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Camião de bebida de cola Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :Camião de Algodão Doce MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Camião de Algodão Doce Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Camião de Algodão Doce Wizzowow @@ -4910,9 +4935,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Camião de Doce STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :Camião de Baterias MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Camião de Baterias Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Camião de Baterias Wizzowow -STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :Camião de Bebidas Gasosas MightyMover -STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Camião de Bebidas Gasosas Powernaught -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Camião de Bebidas Gasosas Wizzowow +STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :Camião de refrigerantes MightyMover +STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Camião de refrigerantes Powernaught +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Camião de refrigerantes Wizzowow STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :Camião de Plástico MightyMover STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Camião de Plástico Powernaught STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Camião de Plástico Wizzowow @@ -4921,15 +4946,15 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Camião de Bolh STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Camião de Bolhas Wizzowow STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :Cisterna de Petróleo MPS STR_VEHICLE_NAME_SHIP_CS_INC_OIL_TANKER :Cisterna de Petróleo CS-Inc. -STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Barco de Passageiros MPS -STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :Barco de Passageiros FFP +STR_VEHICLE_NAME_SHIP_MPS_PASSENGER_FERRY :Navio de passageiros MPS +STR_VEHICLE_NAME_SHIP_FFP_PASSENGER_FERRY :Navio de passageiros FFP STR_VEHICLE_NAME_SHIP_BAKEWELL_300_HOVERCRAFT :Hovercraft Bakewell 300 -STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Barco de Passageiros Chugger-Chug -STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Barco de Passageiros Shivershake -STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Barco de Mercadorias Yate -STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Barco de Mercadorias Bakewell -STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Barco de Mercadorias MightyMover -STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Barco de Mercadorias Powernaut +STR_VEHICLE_NAME_SHIP_CHUGGER_CHUG_PASSENGER :Navio de passageiros Chugger-Chug +STR_VEHICLE_NAME_SHIP_SHIVERSHAKE_PASSENGER_FERRY :Navio de passageiros Shivershake +STR_VEHICLE_NAME_SHIP_YATE_CARGO_SHIP :Navio de mercadorias Yate +STR_VEHICLE_NAME_SHIP_BAKEWELL_CARGO_SHIP :Navio de mercadorias Bakewell +STR_VEHICLE_NAME_SHIP_MIGHTYMOVER_CARGO_SHIP :Navio de carga MightyMover +STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Navio de carga Powernaut STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Sampson U52 STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Coleman Count STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Dart From e001d875693395de6c15e64e0d05e0d94089813e Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 26 Oct 2019 00:48:13 +0200 Subject: [PATCH 04/84] Add #7801: [Script] more error mappings --- src/script/api/ai/ai_error.hpp.sq | 3 +++ src/script/api/ai/ai_tile.hpp.sq | 13 +++++++++---- src/script/api/game/game_error.hpp.sq | 3 +++ src/script/api/game/game_tile.hpp.sq | 13 +++++++++---- src/script/api/script_error.hpp | 6 +++--- src/script/api/script_tile.hpp | 3 +++ 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/script/api/ai/ai_error.hpp.sq b/src/script/api/ai/ai_error.hpp.sq index 2bb2d2d2c2..792a21f1d8 100644 --- a/src/script/api/ai/ai_error.hpp.sq +++ b/src/script/api/ai/ai_error.hpp.sq @@ -56,8 +56,10 @@ void SQAIError_Register(Squirrel *engine) ScriptError::RegisterErrorMap(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY, ScriptError::ERR_NOT_ENOUGH_CASH); ScriptError::RegisterErrorMap(STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS, ScriptError::ERR_LOCAL_AUTHORITY_REFUSES); + ScriptError::RegisterErrorMap(STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE, ScriptError::ERR_LOCAL_AUTHORITY_REFUSES); ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_BUILT, ScriptError::ERR_ALREADY_BUILT); ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, ScriptError::ERR_ALREADY_BUILT); + ScriptError::RegisterErrorMap(STR_ERROR_TREE_ALREADY_HERE, ScriptError::ERR_ALREADY_BUILT); ScriptError::RegisterErrorMap(STR_ERROR_BUILDING_MUST_BE_DEMOLISHED, ScriptError::ERR_AREA_NOT_CLEAR); ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_RAILROAD, ScriptError::ERR_AREA_NOT_CLEAR); @@ -86,6 +88,7 @@ void SQAIError_Register(Squirrel *engine) ScriptError::RegisterErrorMap(STR_ERROR_SHIP_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); ScriptError::RegisterErrorMap(STR_ERROR_SITE_UNSUITABLE, ScriptError::ERR_SITE_UNSUITABLE); + ScriptError::RegisterErrorMap(STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE, ScriptError::ERR_SITE_UNSUITABLE); ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP, ScriptError::ERR_TOO_CLOSE_TO_EDGE); ScriptError::RegisterErrorMap(STR_ERROR_STATION_TOO_SPREAD_OUT, ScriptError::ERR_STATION_TOO_SPREAD_OUT); diff --git a/src/script/api/ai/ai_tile.hpp.sq b/src/script/api/ai/ai_tile.hpp.sq index d5309ec5e2..4d4f0fe37e 100644 --- a/src/script/api/ai/ai_tile.hpp.sq +++ b/src/script/api/ai/ai_tile.hpp.sq @@ -24,6 +24,7 @@ void SQAITile_Register(Squirrel *engine) SQAITile.DefSQConst(engine, ScriptTile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW"); SQAITile.DefSQConst(engine, ScriptTile::ERR_AREA_ALREADY_FLAT, "ERR_AREA_ALREADY_FLAT"); SQAITile.DefSQConst(engine, ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE, "ERR_EXCAVATION_WOULD_DAMAGE"); + SQAITile.DefSQConst(engine, ScriptTile::ERR_LIMIT_REACHED, "ERR_LIMIT_REACHED"); SQAITile.DefSQConst(engine, ScriptTile::CORNER_W, "CORNER_W"); SQAITile.DefSQConst(engine, ScriptTile::CORNER_S, "CORNER_S"); SQAITile.DefSQConst(engine, ScriptTile::CORNER_E, "CORNER_E"); @@ -69,15 +70,19 @@ void SQAITile_Register(Squirrel *engine) SQAITile.DefSQConst(engine, ScriptTile::TERRAIN_RAINFOREST, "TERRAIN_RAINFOREST"); SQAITile.DefSQConst(engine, ScriptTile::TERRAIN_SNOW, "TERRAIN_SNOW"); - ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_HIGH); - ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_LOW); - ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_LEVELLED, ScriptTile::ERR_AREA_ALREADY_FLAT); - ScriptError::RegisterErrorMap(STR_ERROR_EXCAVATION_WOULD_DAMAGE, ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE); + ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_HIGH); + ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_LOW); + ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_LEVELLED, ScriptTile::ERR_AREA_ALREADY_FLAT); + ScriptError::RegisterErrorMap(STR_ERROR_EXCAVATION_WOULD_DAMAGE, ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE); + ScriptError::RegisterErrorMap(STR_ERROR_TERRAFORM_LIMIT_REACHED, ScriptTile::ERR_LIMIT_REACHED); + ScriptError::RegisterErrorMap(STR_ERROR_CLEARING_LIMIT_REACHED, ScriptTile::ERR_LIMIT_REACHED); + ScriptError::RegisterErrorMap(STR_ERROR_TREE_PLANT_LIMIT_REACHED, ScriptTile::ERR_LIMIT_REACHED); ScriptError::RegisterErrorMapString(ScriptTile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH"); ScriptError::RegisterErrorMapString(ScriptTile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW"); ScriptError::RegisterErrorMapString(ScriptTile::ERR_AREA_ALREADY_FLAT, "ERR_AREA_ALREADY_FLAT"); ScriptError::RegisterErrorMapString(ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE, "ERR_EXCAVATION_WOULD_DAMAGE"); + ScriptError::RegisterErrorMapString(ScriptTile::ERR_LIMIT_REACHED, "ERR_LIMIT_REACHED"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsBuildable, "IsBuildable", 2, ".i"); SQAITile.DefSQStaticMethod(engine, &ScriptTile::IsBuildableRectangle, "IsBuildableRectangle", 4, ".iii"); diff --git a/src/script/api/game/game_error.hpp.sq b/src/script/api/game/game_error.hpp.sq index 8dc10b651a..f1f88b3373 100644 --- a/src/script/api/game/game_error.hpp.sq +++ b/src/script/api/game/game_error.hpp.sq @@ -56,8 +56,10 @@ void SQGSError_Register(Squirrel *engine) ScriptError::RegisterErrorMap(STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY, ScriptError::ERR_NOT_ENOUGH_CASH); ScriptError::RegisterErrorMap(STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS, ScriptError::ERR_LOCAL_AUTHORITY_REFUSES); + ScriptError::RegisterErrorMap(STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE, ScriptError::ERR_LOCAL_AUTHORITY_REFUSES); ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_BUILT, ScriptError::ERR_ALREADY_BUILT); ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, ScriptError::ERR_ALREADY_BUILT); + ScriptError::RegisterErrorMap(STR_ERROR_TREE_ALREADY_HERE, ScriptError::ERR_ALREADY_BUILT); ScriptError::RegisterErrorMap(STR_ERROR_BUILDING_MUST_BE_DEMOLISHED, ScriptError::ERR_AREA_NOT_CLEAR); ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, ScriptError::ERR_AREA_NOT_CLEAR); ScriptError::RegisterErrorMap(STR_ERROR_MUST_DEMOLISH_RAILROAD, ScriptError::ERR_AREA_NOT_CLEAR); @@ -86,6 +88,7 @@ void SQGSError_Register(Squirrel *engine) ScriptError::RegisterErrorMap(STR_ERROR_SHIP_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); ScriptError::RegisterErrorMap(STR_ERROR_AIRCRAFT_IN_THE_WAY, ScriptError::ERR_VEHICLE_IN_THE_WAY); ScriptError::RegisterErrorMap(STR_ERROR_SITE_UNSUITABLE, ScriptError::ERR_SITE_UNSUITABLE); + ScriptError::RegisterErrorMap(STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE, ScriptError::ERR_SITE_UNSUITABLE); ScriptError::RegisterErrorMap(STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP, ScriptError::ERR_TOO_CLOSE_TO_EDGE); ScriptError::RegisterErrorMap(STR_ERROR_STATION_TOO_SPREAD_OUT, ScriptError::ERR_STATION_TOO_SPREAD_OUT); diff --git a/src/script/api/game/game_tile.hpp.sq b/src/script/api/game/game_tile.hpp.sq index 149e32db8b..694708c8eb 100644 --- a/src/script/api/game/game_tile.hpp.sq +++ b/src/script/api/game/game_tile.hpp.sq @@ -24,6 +24,7 @@ void SQGSTile_Register(Squirrel *engine) SQGSTile.DefSQConst(engine, ScriptTile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW"); SQGSTile.DefSQConst(engine, ScriptTile::ERR_AREA_ALREADY_FLAT, "ERR_AREA_ALREADY_FLAT"); SQGSTile.DefSQConst(engine, ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE, "ERR_EXCAVATION_WOULD_DAMAGE"); + SQGSTile.DefSQConst(engine, ScriptTile::ERR_LIMIT_REACHED, "ERR_LIMIT_REACHED"); SQGSTile.DefSQConst(engine, ScriptTile::CORNER_W, "CORNER_W"); SQGSTile.DefSQConst(engine, ScriptTile::CORNER_S, "CORNER_S"); SQGSTile.DefSQConst(engine, ScriptTile::CORNER_E, "CORNER_E"); @@ -69,15 +70,19 @@ void SQGSTile_Register(Squirrel *engine) SQGSTile.DefSQConst(engine, ScriptTile::TERRAIN_RAINFOREST, "TERRAIN_RAINFOREST"); SQGSTile.DefSQConst(engine, ScriptTile::TERRAIN_SNOW, "TERRAIN_SNOW"); - ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_HIGH); - ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_LOW); - ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_LEVELLED, ScriptTile::ERR_AREA_ALREADY_FLAT); - ScriptError::RegisterErrorMap(STR_ERROR_EXCAVATION_WOULD_DAMAGE, ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE); + ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_HIGH); + ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_AT_SEA_LEVEL, ScriptTile::ERR_TILE_TOO_LOW); + ScriptError::RegisterErrorMap(STR_ERROR_ALREADY_LEVELLED, ScriptTile::ERR_AREA_ALREADY_FLAT); + ScriptError::RegisterErrorMap(STR_ERROR_EXCAVATION_WOULD_DAMAGE, ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE); + ScriptError::RegisterErrorMap(STR_ERROR_TERRAFORM_LIMIT_REACHED, ScriptTile::ERR_LIMIT_REACHED); + ScriptError::RegisterErrorMap(STR_ERROR_CLEARING_LIMIT_REACHED, ScriptTile::ERR_LIMIT_REACHED); + ScriptError::RegisterErrorMap(STR_ERROR_TREE_PLANT_LIMIT_REACHED, ScriptTile::ERR_LIMIT_REACHED); ScriptError::RegisterErrorMapString(ScriptTile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH"); ScriptError::RegisterErrorMapString(ScriptTile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW"); ScriptError::RegisterErrorMapString(ScriptTile::ERR_AREA_ALREADY_FLAT, "ERR_AREA_ALREADY_FLAT"); ScriptError::RegisterErrorMapString(ScriptTile::ERR_EXCAVATION_WOULD_DAMAGE, "ERR_EXCAVATION_WOULD_DAMAGE"); + ScriptError::RegisterErrorMapString(ScriptTile::ERR_LIMIT_REACHED, "ERR_LIMIT_REACHED"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsBuildable, "IsBuildable", 2, ".i"); SQGSTile.DefSQStaticMethod(engine, &ScriptTile::IsBuildableRectangle, "IsBuildableRectangle", 4, ".iii"); diff --git a/src/script/api/script_error.hpp b/src/script/api/script_error.hpp index aa3c4195e5..87d4196fdd 100644 --- a/src/script/api/script_error.hpp +++ b/src/script/api/script_error.hpp @@ -108,10 +108,10 @@ public: ERR_NOT_ENOUGH_CASH, // [STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY] /** Local authority won't allow the previous action */ - ERR_LOCAL_AUTHORITY_REFUSES, // [STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS] + ERR_LOCAL_AUTHORITY_REFUSES, // [STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS, STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE] /** The piece of infrastructure you tried to build is already in place */ - ERR_ALREADY_BUILT, // [STR_ERROR_ALREADY_BUILT, STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST] + ERR_ALREADY_BUILT, // [STR_ERROR_ALREADY_BUILT, STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, STR_ERROR_TREE_ALREADY_HERE] /** Area isn't clear, try to demolish the building on it */ ERR_AREA_NOT_CLEAR, // [STR_ERROR_BUILDING_MUST_BE_DEMOLISHED, STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, STR_ERROR_MUST_DEMOLISH_RAILROAD, STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST, STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST, STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST, STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST, STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST, STR_ERROR_BUOY_IN_THE_WAY, STR_ERROR_MUST_DEMOLISH_DOCK_FIRST, STR_ERROR_GENERIC_OBJECT_IN_THE_WAY, STR_ERROR_COMPANY_HEADQUARTERS_IN, STR_ERROR_OBJECT_IN_THE_WAY, STR_ERROR_MUST_REMOVE_ROAD_FIRST, STR_ERROR_MUST_REMOVE_RAILROAD_TRACK, STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST, STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST, STR_ERROR_EXCAVATION_WOULD_DAMAGE] @@ -132,7 +132,7 @@ public: ERR_VEHICLE_IN_THE_WAY, // [STR_ERROR_TRAIN_IN_THE_WAY, STR_ERROR_ROAD_VEHICLE_IN_THE_WAY, STR_ERROR_SHIP_IN_THE_WAY, STR_ERROR_AIRCRAFT_IN_THE_WAY] /** Site is unsuitable */ - ERR_SITE_UNSUITABLE, // [STR_ERROR_SITE_UNSUITABLE] + ERR_SITE_UNSUITABLE, // [STR_ERROR_SITE_UNSUITABLE, STR_ERROR_TREE_WRONG_TERRAIN_FOR_TREE_TYPE] /** Too close to the edge of the map */ ERR_TOO_CLOSE_TO_EDGE, // [STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP] diff --git a/src/script/api/script_tile.hpp b/src/script/api/script_tile.hpp index 0abf87c531..423044b21a 100644 --- a/src/script/api/script_tile.hpp +++ b/src/script/api/script_tile.hpp @@ -40,6 +40,9 @@ public: /** There is a tunnel underneath */ ERR_EXCAVATION_WOULD_DAMAGE, // [STR_ERROR_EXCAVATION_WOULD_DAMAGE] + + /** Reached the limit for terraforming/clearing/planting */ + ERR_LIMIT_REACHED, // [STR_ERROR_TERRAFORM_LIMIT_REACHED, STR_ERROR_CLEARING_LIMIT_REACHED, STR_ERROR_TREE_PLANT_LIMIT_REACHED] }; /** From e54184d18bfe7f67eb9a5f0fd145983f7dbc951e Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 18 Dec 2019 19:45:40 +0100 Subject: [PATCH 05/84] Update: Translations from eints portuguese: 16 changes by mcbanhas --- src/lang/portuguese.txt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index d54eee69cd..fca563e982 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2364,7 +2364,7 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Seleccio # Rail waypoint construction window STR_WAYPOINT_CAPTION :{WHITE}Ponto de controlo -STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Seleccione um tipo de ponto de controlo +STR_WAYPOINT_GRAPHICS_TOOLTIP :{BLACK}Selecione um tipo de ponto de controlo # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Selecção de Estação @@ -2467,8 +2467,8 @@ STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Construi STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Construir diques. Shift alterna contruir/mostrar custo estimado STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Construir depósito naval (para compra e manutenção de navio). Shift alterna contruir/mostrar custo estimado STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Construir doca naval. Ctrl permite juntar estações. Shift alterna contruir/mostar custo estimado -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Bóia de posição, que pode ser usada para marcar pontos de rota adicionais. Shift alterna contrução/mostra de custos estimados -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift alterna contruir/mostar custo estimado +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Esta bóia de posição pode ser usada para marcar pontos de rota adicionais. Shift alterna construção/mostra de custos estimados +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Construir aqueduto. Shift alterna contruir/mostrar custo estimado STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Definir área de água.{}Construir um canal, a não ser que a tecla Ctrl esteja pressionada a nível do mar, nesse caso inundará as zonas circundantes STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Colocar rios @@ -3725,10 +3725,10 @@ STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar v STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar navio para o depósito STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Mandar aeronave para o hangar -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Esta acção comprará uma cópia do comboio, incluindo as carruagens. Ctrl+Clique irá partilhar as ordens.Shift+Clique Shift + Clique mostra estimativa de custo, sem comprar -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Esta acção comprará uma cópia do veículo. Ctrl+Clique para partilhar as ordens.Shift+Clique mostra estimativa de custo, sem comprar +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Esta ação comprará uma cópia do comboio, incluindo as carruagens. Ctrl+Clique irá partilhar as ordens. Shift + Clique mostra estimativa de custo, sem comprar +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Esta ação comprará uma cópia do veículo. Ctrl+Clique para partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Esta ação comprará uma cópia do navio. Ctrl+Clique para partilhar as ordens. Shift+Clique mostra estimativa de custo, sem comprar -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esta acção comprará uma cópia da aeronave. Ctrl+Clique para partilhar as ordens.Shift+Clique mostra estimativa de custo, sem comprar +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Esta ação comprará uma cópia da aeronave. Ctrl+Clique para partilhar as ordens.Shift+Clique mostra estimativa de custo, sem comprar STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Forçar comboio a prosseguir sem esperar pelo sinal @@ -3770,7 +3770,7 @@ STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Dirige- STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Sem ordens, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}Dirige-se a {WAYPOINT}, {VELOCITY} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}Dirige-se para {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Efectuar manutenção em {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Efetuar manutenção em {DEPOT}, {VELOCITY} # Vehicle stopped/started animations STR_VEHICLE_COMMAND_STOPPED_SMALL :{TINY_FONT}{RED}Parou @@ -4218,7 +4218,7 @@ STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Impossível ler STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Impossível escrever ficheiro STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Falha ao verificar integridade de dados STR_GAME_SAVELOAD_NOT_AVAILABLE : -STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}O jogo foi salvo numa versão sem suporte a eléctricos. Todos os eléctricos foram removidos. +STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}O jogo foi salvo numa versão sem suporte para eléctricos. Todos os elétricos foram removidos. # Map generation messages STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Geração de mapa abortada...{}... não há locais apropriados para localidades @@ -4767,33 +4767,33 @@ STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_30_ELECTRIC :SH '30' (Eléct STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_40_ELECTRIC :SH '40' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_T_I_M_ELECTRIC :'T.I.M.' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_ASIASTAR_ELECTRIC :'AsiaStar' (Eléctrico) -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Carruagem de Passageiros +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PASSENGER_CAR :Carruagem de passageiros STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_MAIL_VAN :Vagão de Correio STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COAL_CAR :Vagão de Carvão STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_OIL_TANKER :Cisterna de Petróleo STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_LIVESTOCK_VAN :Vagão de Gado STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_GOODS_VAN :Vagão de Bens STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_GRAIN_HOPPER :Vagão de Cereais -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WOOD_TRUCK :Vagão de Madeira +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WOOD_TRUCK :Vagão de madeira STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_IRON_ORE_HOPPER :Vagão de Minério de Ferro -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_STEEL_TRUCK :Vagão de Aço +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_STEEL_TRUCK :Vagão de aço STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_ARMORED_VAN :Vagão Blindado STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FOOD_VAN :Vagão Alimentar STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PAPER_TRUCK :Vagão de Papel STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COPPER_ORE_HOPPER :Vagão de Minério de Cobre -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WATER_TANKER :Cisterna de Água +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_WATER_TANKER :Cisterna de água STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FRUIT_TRUCK :Vagão de Fruta -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Vagão de Borracha -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Vagão de Açúcar +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_RUBBER_TRUCK :Vagão de borracha +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Vagão de açúcar STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Vagão de Algodão Doce -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Vagão de Caramelo +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Vagão de caramelo STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Vagão de Bolhas STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Cisterna de bebida de cola STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :Vagão de Doces STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Vagão de Brinquedos STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Vagão de Baterias STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Vagão de refrigerantes -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Vagão de Plástico +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Vagão de plástico STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Millennium Z1' (Eléctrico) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 From 96f8c1354394824d869ded19c6e70f7b224aa61d Mon Sep 17 00:00:00 2001 From: Samu Date: Sat, 21 Dec 2019 15:10:58 +0000 Subject: [PATCH 06/84] Fix: Custom sea level default value is now equal to minimum value, not lower Custom sea level default value was lower than the minimum --- src/table/settings.ini | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/table/settings.ini b/src/table/settings.ini index 392b4ef1a9..482933e67f 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -2373,9 +2373,9 @@ base = GameSettings var = game_creation.custom_sea_level type = SLE_UINT8 from = SLV_149 -def = 1 -min = 2 -max = 90 +def = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE +min = CUSTOM_SEA_LEVEL_MIN_PERCENTAGE +max = CUSTOM_SEA_LEVEL_MAX_PERCENTAGE cat = SC_BASIC [SDT_VAR] From 379402f02ef4f74b4c3800563d9d91f4b1ae58b5 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 21 Dec 2019 19:45:41 +0100 Subject: [PATCH 07/84] Update: Translations from eints croatian: 9 changes by VoyagerOne --- src/lang/croatian.txt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index b134d13f57..cbe43eb049 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -1650,6 +1650,8 @@ STR_CONFIG_SETTING_SMOOTH_ECONOMY :Uključi stabil STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Kada je uključeno, promjene u industrijskoj proizvodnji su češće ali u manjim rasponima. Ova postavka obično nema efekta ukoliko su industrije postavljene iz nekog NewGRF-a STR_CONFIG_SETTING_ALLOW_SHARES :Dopusti kupovanje udjela u drugim tvrtkama: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Kada je uključeno, dopušta se kupnja i prodaja dionica tvrtki. Dionice će postati dostupne samo za tvrtke određene starosti +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. 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 STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Kod povlačenja, postavi signale svakih: {STRING} @@ -3216,6 +3218,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Preimenuj grad # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Lokalna samouprava grada {TOWN}a +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Pokaži područje sa granicama lokalne vlasti STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Ocjene prijevoznih tvrtki: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Dostupne radnje: @@ -3484,7 +3488,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrije STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ništa - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% prevezeno){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} i {NUM} više... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Imena industrija - za centriranje pogleda klikni na ime. Ctrl+klik otvara novi prozor sa lokacijom industrije # Industry view From 68f22134cb35267d6fa01134a385d3854fda1787 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 14 Dec 2019 17:21:48 +0100 Subject: [PATCH 08/84] Add: Allow iteration of pools in range-based for loops --- src/core/pool_type.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 360bda2d59..565f1500e5 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -12,6 +12,7 @@ #include "smallvec_type.hpp" #include "enum_type.hpp" +#include /** Various types of a pool. */ enum PoolType { @@ -136,6 +137,47 @@ struct Pool : PoolBase { return ret; } + /** + * Iterator to iterate all valid T of a pool + * @tparam T Type of the class/struct that is going to be iterated + */ + template + struct PoolIterator { + typedef T value_type; + typedef T* pointer; + typedef T& reference; + typedef size_t difference_type; + typedef std::forward_iterator_tag iterator_category; + + explicit PoolIterator(size_t index, std::function filter = nullptr) : index(index), filter(filter) + { + if (this->filter == nullptr) this->filter = [](size_t) { return true; }; + this->ValidateIndex(); + }; + + bool operator!=(const PoolIterator &other) const { return this->index != other.index; } + T * operator*() const { return T::Get(this->index); } + PoolIterator & operator++() { this->index++; this->ValidateIndex(); return *this; } + + private: + size_t index; + std::function filter; + void ValidateIndex() { while (this->index < T::GetPoolSize() && !(T::IsValidID(this->index) && this->filter(this->index))) this->index++; } + }; + + /* + * Iterable ensemble of all valid T + * @tparam T Type of the class/struct that is going to be iterated + */ + template + struct IterateWrapper { + size_t from; + std::function filter; + IterateWrapper(size_t from = 0, std::function filter = nullptr) : from(from), filter(filter) {} + PoolIterator begin() { return PoolIterator(this->from, this->filter); } + PoolIterator end() { return PoolIterator(T::GetPoolSize()); } + }; + /** * Base class for all PoolItems * @tparam Tpool The pool this item is going to be part of @@ -144,6 +186,9 @@ struct Pool : PoolBase { struct PoolItem { Tindex index; ///< Index of this pool item + /** Type of the pool this item is going to be part of */ + typedef struct Pool Pool; + /** * Allocates space for new Titem * @param size size of Titem @@ -284,6 +329,13 @@ struct Pool : PoolBase { * @note it's called only when !CleaningPool() */ static inline void PostDestructor(size_t index) { } + + /** + * Returns an iterable ensemble of all valid Titem + * @param from index of the first Titem to consider + * @return an iterable ensemble of all valid Titem + */ + static Pool::IterateWrapper Iterate(size_t from = 0) { return Pool::IterateWrapper(from); } }; private: From 3a14cea068d130e11b5d9dde11d4451dd7dec453 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 14 Dec 2019 17:22:38 +0100 Subject: [PATCH 09/84] Codechange: Replace FOR_ALL_COMPANIES with range-based for loops --- src/ai/ai_core.cpp | 6 ++--- src/ai/ai_gui.cpp | 9 +++---- src/company_base.h | 3 --- src/company_cmd.cpp | 37 +++++++++------------------ src/company_gui.cpp | 9 +++---- src/console_cmds.cpp | 6 ++--- src/crashlog.cpp | 3 +-- src/economy.cpp | 19 ++++++-------- src/elrail.cpp | 3 +-- src/engine.cpp | 16 +++++------- src/graph_gui.cpp | 17 +++++-------- src/group_cmd.cpp | 8 +++--- src/highscore.cpp | 3 +-- src/network/network_admin.cpp | 12 +++------ src/network/network_server.cpp | 6 ++--- src/network/network_udp.cpp | 6 ++--- src/openttd.cpp | 5 ++-- src/saveload/afterload.cpp | 46 +++++++++++++--------------------- src/saveload/company_sl.cpp | 10 +++----- src/saveload/oldloader_sl.cpp | 3 +-- src/saveload/saveload.cpp | 3 +-- src/screenshot.cpp | 3 +-- src/smallmap_gui.cpp | 3 +-- src/statusbar_gui.cpp | 3 +-- src/terraform_gui.cpp | 3 +-- src/town_cmd.cpp | 7 ++---- src/town_gui.cpp | 3 +-- 27 files changed, 87 insertions(+), 165 deletions(-) diff --git a/src/ai/ai_core.cpp b/src/ai/ai_core.cpp index 459a3ead49..95c971af8e 100644 --- a/src/ai/ai_core.cpp +++ b/src/ai/ai_core.cpp @@ -75,8 +75,7 @@ if ((AI::frame_counter & ((1 << (4 - _settings_game.difficulty.competitor_speed)) - 1)) != 0) return; Backup cur_company(_current_company, FILE_LINE); - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai) { PerformanceMeasurer framerate((PerformanceElement)(PFE_AI0 + c->index)); cur_company.Change(c->index); @@ -154,8 +153,7 @@ /* It might happen there are no companies .. than we have nothing to loop */ if (Company::GetPoolSize() == 0) return; - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai) AI::Stop(c->index); } } diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 25d34dee03..a684e4a350 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -1052,8 +1052,7 @@ struct AIDebugWindow : public Window { ai_debug_company = INVALID_COMPANY; - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai) { ChangeToAI(c->index); return; @@ -1312,8 +1311,7 @@ struct AIDebugWindow : public Window { if ((_pause_mode & PM_PAUSED_NORMAL) == PM_PAUSED_NORMAL) { bool all_unpaused = !Game::IsPaused(); if (all_unpaused) { - Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai && AI::IsPaused(c->index)) { all_unpaused = false; break; @@ -1552,8 +1550,7 @@ void ShowAIDebugWindowIfAIError() /* Network clients can't debug AIs. */ if (_networking && !_network_server) return; - Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai && c->ai_instance->IsDead()) { ShowAIDebugWindow(c->index); break; diff --git a/src/company_base.h b/src/company_base.h index 874e6208e9..095f7d9e6c 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -168,9 +168,6 @@ struct Company : CompanyPool::PoolItem<&_company_pool>, CompanyProperties { static void PostDestructor(size_t index); }; -#define FOR_ALL_COMPANIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Company, company_index, var, start) -#define FOR_ALL_COMPANIES(var) FOR_ALL_COMPANIES_FROM(var, 0) - Money CalculateCompanyValue(const Company *c, bool including_loan = true); extern uint _next_competitor_start; diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 1f427cf312..97be03fa90 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -263,8 +263,7 @@ void SubtractMoneyFromCompanyFract(CompanyID company, CommandCost cst) /** Update the landscaping limits per company. */ void UpdateLandscapingLimits() { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->terraform_limit = min(c->terraform_limit + _settings_game.construction.terraform_per_64k_frames, (uint32)_settings_game.construction.terraform_frame_burst << 16); c->clear_limit = min(c->clear_limit + _settings_game.construction.clear_per_64k_frames, (uint32)_settings_game.construction.clear_frame_burst << 16); c->tree_limit = min(c->tree_limit + _settings_game.construction.tree_per_64k_frames, (uint32)_settings_game.construction.tree_frame_burst << 16); @@ -360,8 +359,7 @@ static void GenerateCompanyName(Company *c) verify_name:; /* No companies must have this name already */ - Company *cc; - FOR_ALL_COMPANIES(cc) { + for (const Company *cc : Company::Iterate()) { if (cc->name_1 == str && cc->name_2 == strp) goto bad_town_name; } @@ -447,8 +445,7 @@ static Colours GenerateCompanyColour() } /* Move the colours that look similar to each company's colour to the side */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { Colours pcolour = (Colours)c->colour; for (uint i = 0; i < COLOUR_END; i++) { @@ -494,8 +491,7 @@ restart:; GetString(buffer, STR_PRESIDENT_NAME, lastof(buffer)); if (Utf8StringLength(buffer) >= MAX_LENGTH_PRESIDENT_NAME_CHARS) continue; - Company *cc; - FOR_ALL_COMPANIES(cc) { + for (const Company *cc : Company::Iterate()) { if (c != cc) { /* Reserve extra space so even overlength president names can be compared. */ char buffer2[(MAX_LENGTH_PRESIDENT_NAME_CHARS + 1) * MAX_CHAR_LENGTH]; @@ -598,11 +594,9 @@ static bool MaybeStartNewCompany() { if (_networking && Company::GetNumItems() >= _settings_client.network.max_companies) return false; - Company *c; - /* count number of competitors */ uint n = 0; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai) n++; } @@ -671,11 +665,11 @@ static void HandleBankruptcyTakeover(Company *c) /* Did we ask everyone for bankruptcy? If so, bail out. */ if (c->bankrupt_asked == MAX_UVALUE(CompanyMask)) return; - Company *c2, *best = nullptr; + Company *best = nullptr; int32 best_performance = -1; /* Ask the company with the highest performance history first */ - FOR_ALL_COMPANIES(c2) { + for (Company *c2 : Company::Iterate()) { if (c2->bankrupt_asked == 0 && // Don't ask companies going bankrupt themselves !HasBit(c->bankrupt_asked, c2->index) && best_performance < c2->old_economy[1].performance_history && @@ -737,10 +731,8 @@ void OnTick_Companies() */ void CompaniesYearlyLoop() { - Company *c; - /* Copy statistics */ - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { memmove(&c->yearly_expenses[1], &c->yearly_expenses[0], sizeof(c->yearly_expenses) - sizeof(c->yearly_expenses[0])); memset(&c->yearly_expenses[0], 0, sizeof(c->yearly_expenses[0])); SetWindowDirty(WC_FINANCES, c->index); @@ -748,7 +740,7 @@ void CompaniesYearlyLoop() if (_settings_client.gui.show_finances && _local_company != COMPANY_SPECTATOR) { ShowCompanyFinances(_local_company); - c = Company::Get(_local_company); + Company *c = Company::Get(_local_company); if (c->num_valid_stat_ent > 5 && c->old_economy[0].performance_history < c->old_economy[4].performance_history) { if (_settings_client.sound.new_year) SndPlayFx(SND_01_BAD_YEAR); } else { @@ -971,8 +963,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, /* Ensure no two companies have the same primary colour */ if (scheme == LS_DEFAULT && !second) { - const Company *cc; - FOR_ALL_COMPANIES(cc) { + for (const Company *cc : Company::Iterate()) { if (cc != c && cc->colour == colour) return CMD_ERROR; } } @@ -1053,9 +1044,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, */ static bool IsUniqueCompanyName(const char *name) { - const Company *c; - - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->name != nullptr && strcmp(c->name, name) == 0) return false; } @@ -1098,9 +1087,7 @@ CommandCost CmdRenameCompany(TileIndex tile, DoCommandFlag flags, uint32 p1, uin */ static bool IsUniquePresidentName(const char *name) { - const Company *c; - - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->president_name != nullptr && strcmp(c->president_name, name) == 0) return false; } diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 533a26a2d2..c09dab139f 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -574,7 +574,7 @@ private: /* Disallow other company colours for the primary colour */ if (this->livery_class < LC_GROUP_RAIL && HasBit(this->sel, LS_DEFAULT) && primary) { - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->index != _local_company) SetBit(used_colours, c->colour); } } @@ -2396,9 +2396,7 @@ struct CompanyWindow : Window break; case WID_C_DESC_OWNERS: { - const Company *c2; - - FOR_ALL_COMPANIES(c2) { + for (const Company *c2 : Company::Iterate()) { SetDParamMaxValue(0, 75); SetDParam(1, c2->index); @@ -2500,10 +2498,9 @@ struct CompanyWindow : Window } case WID_C_DESC_OWNERS: { - const Company *c2; uint y = r.top; - FOR_ALL_COMPANIES(c2) { + for (const Company *c2 : Company::Iterate()) { uint amt = GetAmountOwnedBy(c, c2->index); if (amt != 0) { SetDParam(0, amt * 25); diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index a1a155a82c..f4d0626a5b 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1142,9 +1142,8 @@ DEF_CONSOLE_CMD(ConStartAI) } int n = 0; - Company *c; /* Find the next free slot */ - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->index != n) break; n++; } @@ -1535,8 +1534,7 @@ DEF_CONSOLE_CMD(ConCompanies) return true; } - Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { /* Grab the company name */ char company_name[512]; SetDParam(0, c->index); diff --git a/src/crashlog.cpp b/src/crashlog.cpp index a018c40a36..c7cf48154c 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -193,8 +193,7 @@ char *CrashLog::LogConfiguration(char *buffer, const char *last) const ); buffer += seprintf(buffer, last, "AI Configuration (local: %i) (current: %i):\n", (int)_local_company, (int)_current_company); - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->ai_info == nullptr) { buffer += seprintf(buffer, last, " %2i: Human\n", (int)c->index); } else { diff --git a/src/economy.cpp b/src/economy.cpp index a5145d756a..f115cf9c8e 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -297,8 +297,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) * There are no spectators in single player, so we must pick some other company. */ assert(!_networking); Backup cur_company2(_current_company, FILE_LINE); - Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->index != old_owner) { SetLocalCompany(c->index); break; @@ -313,11 +312,10 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) assert(old_owner != new_owner); { - Company *c; uint i; /* See if the old_owner had shares in other companies */ - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { for (i = 0; i < 4; i++) { if (c->share_owners[i] == old_owner) { /* Sell his shares */ @@ -331,7 +329,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) /* Sell all the shares that people have on this company */ Backup cur_company2(_current_company, FILE_LINE); - c = Company::Get(old_owner); + const Company *c = Company::Get(old_owner); for (i = 0; i < 4; i++) { cur_company2.Change(c->share_owners[i]); if (_current_company != INVALID_OWNER) { @@ -658,8 +656,7 @@ static void CompanyCheckBankrupt(Company *c) static void CompaniesGenStatistics() { /* Check for bankruptcy each month */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { CompanyCheckBankrupt(c); } @@ -674,7 +671,7 @@ static void CompaniesGenStatistics() } } else { /* Improved monthly infrastructure costs. */ - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { cur_company.Change(c->index); CommandCost cost(EXPENSES_PROPERTY); @@ -700,7 +697,7 @@ static void CompaniesGenStatistics() /* Only run the economic statics and update company stats every 3rd month (1st of quarter). */ if (!HasBit(1 << 0 | 1 << 3 | 1 << 6 | 1 << 9, _cur_month)) return; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { /* Drop the oldest history off the end */ std::copy_backward(c->old_economy, c->old_economy + MAX_HISTORY_QUARTERS - 1, c->old_economy + MAX_HISTORY_QUARTERS); c->old_economy[0] = c->cur_economy; @@ -833,10 +830,8 @@ void RecomputePrices() /** Let all companies pay the monthly interest on their loan. */ static void CompaniesPayInterest() { - const Company *c; - Backup cur_company(_current_company, FILE_LINE); - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { cur_company.Change(c->index); /* Over a year the paid interest should be "loan * interest percentage", diff --git a/src/elrail.cpp b/src/elrail.cpp index db5a89be5e..b169479da3 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -591,7 +591,6 @@ void DrawRailCatenary(const TileInfo *ti) bool SettingsDisableElrail(int32 p1) { - Company *c; Train *t; bool disable = (p1 != 0); @@ -632,7 +631,7 @@ bool SettingsDisableElrail(int32 p1) } } - FOR_ALL_COMPANIES(c) c->avail_railtypes = GetCompanyRailtypes(c->index); + for (Company *c : Company::Iterate()) c->avail_railtypes = GetCompanyRailtypes(c->index); /* This resets the _last_built_railtype, which will be invalid for electric * rails. It may have unintended consequences if that function is ever diff --git a/src/engine.cpp b/src/engine.cpp index 3027ee387b..4baf906e5b 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -703,8 +703,7 @@ void StartupEngines() } /* Update the bitmasks for the vehicle lists */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->avail_railtypes = GetCompanyRailtypes(c->index); c->avail_roadtypes = GetCompanyRoadTypes(c->index); } @@ -763,8 +762,7 @@ static CompanyID GetPreviewCompany(Engine *e) CargoTypes cargomask = e->type != VEH_TRAIN ? GetUnionOfArticulatedRefitMasks(e->index, true) : ALL_CARGOTYPES; int32 best_hist = -1; - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->block_preview == 0 && !HasBit(e->preview_asked, c->index) && c->old_economy[0].performance_history > best_hist) { @@ -806,8 +804,7 @@ static bool IsVehicleTypeDisabled(VehicleType type, bool ai) /** Daily check to offer an exclusive engine preview to the companies. */ void EnginesDailyLoop() { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes, _date); c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes, _date); } @@ -908,13 +905,12 @@ CommandCost CmdWantEnginePreview(TileIndex tile, DoCommandFlag flags, uint32 p1, static void NewVehicleAvailable(Engine *e) { Vehicle *v; - Company *c; EngineID index = e->index; /* In case the company didn't build the vehicle during the intro period, * prevent that company from getting future intro periods for a while. */ if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) { - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { uint block_preview = c->block_preview; if (!HasBit(e->company_avail, c->index)) continue; @@ -948,11 +944,11 @@ static void NewVehicleAvailable(Engine *e) /* maybe make another rail type available */ RailType railtype = e->u.rail.railtype; assert(railtype < RAILTYPE_END); - FOR_ALL_COMPANIES(c) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date); + for (Company *c : Company::Iterate()) c->avail_railtypes = AddDateIntroducedRailTypes(c->avail_railtypes | GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes, _date); } else if (e->type == VEH_ROAD) { /* maybe make another road type available */ assert(e->u.road.roadtype < ROADTYPE_END); - FOR_ALL_COMPANIES(c) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date); + for (Company* c : Company::Iterate()) c->avail_roadtypes = AddDateIntroducedRoadTypes(c->avail_roadtypes | GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes, _date); } /* Only broadcast event if AIs are able to build this vehicle type. */ diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 02b898a1db..d454d8a9b5 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -567,8 +567,7 @@ public: } byte nums = 0; - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { nums = min(this->num_vert_lines, max(nums, c->num_valid_stat_ent)); } @@ -592,7 +591,7 @@ public: int numd = 0; for (CompanyID k = COMPANY_FIRST; k < MAX_COMPANIES; k++) { - c = Company::GetIfValid(k); + const Company *c = Company::GetIfValid(k); if (c != nullptr) { this->colours[numd] = _colour_gradient[c->colour][6]; for (int j = this->num_on_x_axis, i = 0; --j >= 0;) { @@ -1136,8 +1135,7 @@ private: this->companies.clear(); - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { this->companies.push_back(c); } @@ -1219,8 +1217,7 @@ public: this->icon_width = d.width + 2; this->line_height = max(d.height + 2, FONT_HEIGHT_NORMAL); - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { SetDParam(0, c->index); SetDParam(1, c->index); SetDParam(2, _performance_titles[widest_title]); @@ -1299,8 +1296,7 @@ struct PerformanceRatingDetailWindow : Window { { /* Update all company stats with the current data * (this is because _score_info is not saved to a savegame) */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { UpdateCompanyRatingAndValue(c, false); } @@ -1497,8 +1493,7 @@ struct PerformanceRatingDetailWindow : Window { } if (this->company == INVALID_COMPANY) { - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { this->company = c->index; break; } diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 9f0d2cd802..95b7070c73 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -101,8 +101,7 @@ void GroupStatistics::Clear() /* static */ void GroupStatistics::UpdateAfterLoad() { /* Set up the engine count for all companies */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { for (VehicleType type = VEH_BEGIN; type < VEH_COMPANY_END; type++) { c->group_all[type].Clear(); c->group_default[type].Clear(); @@ -123,7 +122,7 @@ void GroupStatistics::Clear() if (v->IsPrimaryVehicle()) GroupStatistics::CountVehicle(v, 1); } - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { GroupStatistics::UpdateAutoreplace(c->index); } } @@ -183,8 +182,7 @@ void GroupStatistics::Clear() /* static */ void GroupStatistics::UpdateProfits() { /* Set up the engine count for all companies */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { for (VehicleType type = VEH_BEGIN; type < VEH_COMPANY_END; type++) { c->group_all[type].ClearProfits(); c->group_default[type].ClearProfits(); diff --git a/src/highscore.cpp b/src/highscore.cpp index ccdf4d79fd..d8fe348fe0 100644 --- a/src/highscore.cpp +++ b/src/highscore.cpp @@ -87,13 +87,12 @@ static bool HighScoreSorter(const Company * const &a, const Company * const &b) */ int8 SaveHighScoreValueNetwork() { - const Company *c; const Company *cl[MAX_COMPANIES]; uint count = 0; int8 company = -1; /* Sort all active companies with the highest score first */ - FOR_ALL_COMPANIES(c) cl[count++] = c; + for (const Company *c : Company::Iterate()) cl[count++] = c; std::sort(std::begin(cl), std::begin(cl) + count, HighScoreSorter); diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 25481da93d..037307627e 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -399,8 +399,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyRemove(CompanyID c /** Send economic information of all companies. */ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyEconomy() { - const Company *company; - FOR_ALL_COMPANIES(company) { + for (const Company *company : Company::Iterate()) { /* Get the income. */ Money income = 0; for (uint i = 0; i < lengthof(company->yearly_expenses[0]); i++) { @@ -438,10 +437,8 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::SendCompanyStats() NetworkCompanyStats company_stats[MAX_COMPANIES]; NetworkPopulateCompanyStats(company_stats); - const Company *company; - /* Go through all the companies. */ - FOR_ALL_COMPANIES(company) { + for (const Company *company : Company::Iterate()) { Packet *p = new Packet(ADMIN_PACKET_SERVER_COMPANY_STATS); /* Send the information. */ @@ -748,13 +745,12 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_POLL(Packet *p) case ADMIN_UPDATE_COMPANY_INFO: /* The admin is asking for company info. */ - const Company *company; if (d1 == UINT32_MAX) { - FOR_ALL_COMPANIES(company) { + for (const Company *company : Company::Iterate()) { this->SendCompanyInfo(company); } } else { - company = Company::GetIfValid(d1); + const Company *company = Company::GetIfValid(d1); if (company != nullptr) this->SendCompanyInfo(company); } break; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 7505bff872..a8322ff904 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -380,10 +380,9 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() /* Now send the data */ - Company *company; Packet *p; - FOR_ALL_COMPANIES(company) { + for (const Company *company : Company::Iterate()) { p = new Packet(PACKET_SERVER_COMPANY_INFO); p->Send_uint8 (NETWORK_COMPANY_INFO_VERSION); @@ -1619,7 +1618,6 @@ static void NetworkCheckRestartMap() static void NetworkAutoCleanCompanies() { const NetworkClientInfo *ci; - const Company *c; bool clients_in_company[MAX_COMPANIES]; int vehicles_in_company[MAX_COMPANIES]; @@ -1648,7 +1646,7 @@ static void NetworkAutoCleanCompanies() } /* Go through all the companies */ - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { /* Skip the non-active once */ if (c->is_ai) continue; diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index ddf2e95188..90b99ec44b 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -198,8 +198,7 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_DETAIL_INFO(Packet *p, Networ for (;;) { int free = SEND_MTU - packet.size; - Company *company; - FOR_ALL_COMPANIES(company) { + for (const Company *company : Company::Iterate()) { char company_name[NETWORK_COMPANY_NAME_LENGTH]; SetDParam(0, company->index); GetString(company_name, STR_COMPANY_NAME, company_name + max_cname_length - 1); @@ -214,9 +213,8 @@ void ServerNetworkUDPSocketHandler::Receive_CLIENT_DETAIL_INFO(Packet *p, Networ } } - Company *company; /* Go through all the companies */ - FOR_ALL_COMPANIES(company) { + for (const Company *company : Company::Iterate()) { /* Send the information */ this->SendCompanyInformation(&packet, company, &company_stats[company->index], max_cname_length); } diff --git a/src/openttd.cpp b/src/openttd.cpp index c7c518ae44..fde01111d7 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1207,14 +1207,13 @@ static void CheckCaches() /* Check company infrastructure cache. */ std::vector old_infrastructure; - Company *c; - FOR_ALL_COMPANIES(c) old_infrastructure.push_back(c->infrastructure); + for (const Company *c : Company::Iterate()) old_infrastructure.push_back(c->infrastructure); extern void AfterLoadCompanyStats(); AfterLoadCompanyStats(); i = 0; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (MemCmpT(old_infrastructure.data() + i, &c->infrastructure) != 0) { DEBUG(desync, 2, "infrastructure cache mismatch: company %i", (int)c->index); } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 943885473a..c10904c8a4 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -243,8 +243,7 @@ static void InitializeWindowsAndCaches() UpdateAllVirtCoords(); ResetViewportAfterLoadGame(); - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { /* For each company, verify (while loading a scenario) that the inauguration date is the current year and set it * accordingly if it is not the case. No need to set it on companies that are not been used already, * thus the MIN_YEAR (which is really nothing more than Zero, initialized value) test */ @@ -644,8 +643,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_84)) { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->name = CopyFromOldName(c->name_1); if (c->name != nullptr) c->name_1 = STR_SV_UNNAMED; c->president_name = CopyFromOldName(c->president_name_1); @@ -678,8 +676,7 @@ bool AfterLoadGame() } /* the same applies to Company::location_of_HQ */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { if (c->location_of_HQ == 0 || (IsSavegameVersionBefore(SLV_4) && c->location_of_HQ == 0xFFFF)) { c->location_of_HQ = INVALID_TILE; } @@ -800,8 +797,7 @@ bool AfterLoadGame() /* Make sure there is an AI attached to an AI company */ { - Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->is_ai && c->ai_instance == nullptr) AI::StartNew(c->index); } } @@ -1000,8 +996,7 @@ bool AfterLoadGame() /* From version 16.0, we included autorenew on engines, which are now saved, but * of course, we do need to initialize them for older savegames. */ if (IsSavegameVersionBefore(SLV_16)) { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->engine_renew_list = nullptr; c->settings.engine_renew = false; c->settings.engine_renew_months = 6; @@ -1014,7 +1009,7 @@ bool AfterLoadGame() * becomes company 0, unless we are in the scenario editor where all the * companies are 'invalid'. */ - c = Company::GetIfValid(COMPANY_FIRST); + Company *c = Company::GetIfValid(COMPANY_FIRST); if (!_network_dedicated && c != nullptr) { c->settings = _settings_client.company; } @@ -1349,8 +1344,7 @@ bool AfterLoadGame() * replaced, shall keep their old length. In all prior versions, just default * to false */ if (IsSavegameVersionBefore(SLV_16, 1)) { - Company *c; - FOR_ALL_COMPANIES(c) c->settings.renew_keep_length = false; + for (Company *c : Company::Iterate()) c->settings.renew_keep_length = false; } if (IsSavegameVersionBefore(SLV_123)) { @@ -1413,12 +1407,10 @@ bool AfterLoadGame() YapfNotifyTrackLayoutChange(INVALID_TILE, INVALID_TRACK); if (IsSavegameVersionBefore(SLV_34)) { - Company *c; - FOR_ALL_COMPANIES(c) ResetCompanyLivery(c); + for (Company *c : Company::Iterate()) ResetCompanyLivery(c); } - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->avail_railtypes = GetCompanyRailtypes(c->index); c->avail_roadtypes = GetCompanyRoadTypes(c->index); } @@ -1440,7 +1432,7 @@ bool AfterLoadGame() FOR_ALL_STATIONS(st) st->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; FOR_ALL_WAYPOINTS(wp) wp->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; FOR_ALL_ENGINES(e) e->intro_date += DAYS_TILL_ORIGINAL_BASE_YEAR; - FOR_ALL_COMPANIES(c) c->inaugurated_year += ORIGINAL_BASE_YEAR; + for (Company *c : Company::Iterate()) c->inaugurated_year += ORIGINAL_BASE_YEAR; FOR_ALL_INDUSTRIES(i) i->last_prod_year += ORIGINAL_BASE_YEAR; FOR_ALL_VEHICLES(v) { @@ -1592,7 +1584,7 @@ bool AfterLoadGame() } } - if (IsSavegameVersionBefore(SLV_49)) FOR_ALL_COMPANIES(c) c->face = ConvertFromOldCompanyManagerFace(c->face); + if (IsSavegameVersionBefore(SLV_49)) for (Company *c : Company::Iterate()) c->face = ConvertFromOldCompanyManagerFace(c->face); if (IsSavegameVersionBefore(SLV_52)) { for (TileIndex t = 0; t < map_size; t++) { @@ -1792,7 +1784,7 @@ bool AfterLoadGame() * *really* old revisions of OTTD; else it is already set in InitializeCompanies()) * 2) shares that are owned by inactive companies or self * (caused by cheating clients in earlier revisions) */ - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { for (uint i = 0; i < 4; i++) { CompanyID company = c->share_owners[i]; if (company == INVALID_COMPANY) continue; @@ -2061,8 +2053,7 @@ bool AfterLoadGame() } /* More companies ... */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = 0xFFFF; } @@ -2199,8 +2190,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_120)) { extern VehicleDefaultSettings _old_vds; - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->settings.vehicle = _old_vds; } } @@ -2663,8 +2653,7 @@ bool AfterLoadGame() } /* Introduced terraform/clear limits. */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->terraform_limit = _settings_game.construction.terraform_frame_burst << 16; c->clear_limit = _settings_game.construction.clear_frame_burst << 16; } @@ -2923,8 +2912,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_175)) { /* Introduced tree planting limit. */ - Company *c; - FOR_ALL_COMPANIES(c) c->tree_limit = _settings_game.construction.tree_frame_burst << 16; + for (Company *c : Company::Iterate()) c->tree_limit = _settings_game.construction.tree_frame_burst << 16; } if (IsSavegameVersionBefore(SLV_177)) { @@ -2933,7 +2921,7 @@ bool AfterLoadGame() if (_economy.inflation_payment > MAX_INFLATION) _economy.inflation_payment = MAX_INFLATION; /* We have to convert the quarters of bankruptcy into months of bankruptcy */ - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->months_of_bankruptcy = 3 * c->months_of_bankruptcy; } } diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 19e2e23430..e1dc5cdc21 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -94,8 +94,7 @@ CompanyManagerFace ConvertFromOldCompanyManagerFace(uint32 face) void AfterLoadCompanyStats() { /* Reset infrastructure statistics to zero. */ - Company *c; - FOR_ALL_COMPANIES(c) MemSetT(&c->infrastructure, 0); + for (Company *c : Company::Iterate()) MemSetT(&c->infrastructure, 0); /* Collect airport count. */ Station *st; @@ -105,6 +104,7 @@ void AfterLoadCompanyStats() } } + Company *c; for (TileIndex tile = 0; tile < MapSize(); tile++) { switch (GetTileType(tile)) { case MP_RAILWAY: @@ -486,8 +486,7 @@ static void SaveLoad_PLYR(Company *c) static void Save_PLYR() { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { SlSetArrayIndex(c->index); SlAutolength((AutolengthProc*)SaveLoad_PLYR, c); } @@ -534,8 +533,7 @@ static void Check_PLYR() static void Ptrs_PLYR() { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { SlObject(c, _company_settings_desc); } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index ae7aa890cd..3a3efa34db 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -459,8 +459,7 @@ static bool FixTTOEngines() static void FixTTOCompanies() { - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { c->cur_economy.company_value = CalculateCompanyValue(c); // company value history is zeroed } } diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 6394614608..d652f0d253 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2816,8 +2816,7 @@ void GenerateDefaultSaveName(char *buf, const char *last) * 'Spectator' as "company" name. */ CompanyID cid = _local_company; if (!Company::IsValidID(cid)) { - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { cid = c->index; break; } diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 218231cd77..60196cdf07 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -315,8 +315,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user p += seprintf(p, lastof(buf), " %s\n", c->filename); } p = strecpy(p, "\nCompanies:\n", lastof(buf)); - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (c->ai_info == nullptr) { p += seprintf(p, lastof(buf), "%2i: Human\n", (int)c->index); } else { diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 1cc9354dac..d76c4652fb 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -333,8 +333,7 @@ void BuildOwnerLegend() _legend_land_owners[1].colour = _heightmap_schemes[_settings_client.gui.smallmap_land_colour].default_colour; int i = NUM_NO_COMPANY_ENTRIES; - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { _legend_land_owners[i].colour = _colour_gradient[c->colour][5]; _legend_land_owners[i].company = c->index; _legend_land_owners[i].show_on_map = true; diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 3f43967049..322e196dfa 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -120,8 +120,7 @@ struct StatusBarWindow : Window { case WID_S_RIGHT: { int64 max_money = UINT32_MAX; - const Company *c; - FOR_ALL_COMPANIES(c) max_money = max(c->money, max_money); + for (const Company *c : Company::Iterate()) max_money = max(c->money, max_money); SetDParam(0, 100LL * max_money); d = GetStringBoundingBox(STR_COMPANY_MONEY); break; diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index bdf37a9782..2f65bb6101 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -500,8 +500,7 @@ static void ResetLandscapeConfirmationCallback(Window *w, bool confirmed) _generating_world = true; /* Delete all companies */ - Company *c; - FOR_ALL_COMPANIES(c) { + for (Company *c : Company::Iterate()) { ChangeOwnershipOfCompanyItems(c->index, INVALID_OWNER); delete c; } diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index fbfd874921..6f907bc3cc 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -3294,8 +3294,7 @@ static void ForAllStationsNearTown(Town *t, Func func) static void UpdateTownRating(Town *t) { /* Increase company ratings if they're low */ - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (t->ratings[c->index] < RATING_GROWTH_MAXIMUM) { t->ratings[c->index] = min((int)RATING_GROWTH_MAXIMUM, t->ratings[c->index] + RATING_GROWTH_UP_STEP); } @@ -3451,9 +3450,7 @@ static void UpdateTownAmounts(Town *t) static void UpdateTownUnwanted(Town *t) { - const Company *c; - - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if (t->unwanted[c->index] > 0) t->unwanted[c->index]--; } } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index a0f04314de..2f5a72a362 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -149,8 +149,7 @@ public: uint exclusive_left = rtl ? right - icon_width - exclusive_width - 2 : left + icon_width + 2; /* Draw list of companies */ - const Company *c; - FOR_ALL_COMPANIES(c) { + for (const Company *c : Company::Iterate()) { if ((HasBit(this->town->have_ratings, c->index) || this->town->exclusivity == c->index)) { DrawCompanyIcon(c->index, icon_left, y + icon_y_offset); From ddabfed1cd3efa9ee229214207a60fc7cb3e0641 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 15 Dec 2019 05:55:59 +0100 Subject: [PATCH 10/84] Codechange: Replace station related FOR_ALL with range-based for loops --- src/aircraft_cmd.cpp | 3 +- src/base_station_base.h | 11 +++-- src/disaster_vehicle.cpp | 3 +- src/economy.cpp | 16 ++---- src/linkgraph/linkgraph_gui.cpp | 3 +- src/network/network_server.cpp | 3 +- src/openttd.cpp | 3 +- src/saveload/afterload.cpp | 67 +++++++++----------------- src/saveload/cargopacket_sl.cpp | 6 +-- src/saveload/company_sl.cpp | 3 +- src/saveload/station_sl.cpp | 18 +++---- src/saveload/vehicle_sl.cpp | 3 +- src/script/api/script_depotlist.cpp | 3 +- src/script/api/script_stationlist.cpp | 3 +- src/script/api/script_town.cpp | 3 +- src/script/api/script_waypointlist.cpp | 3 +- src/settings.cpp | 3 +- src/station.cpp | 9 ++-- src/station_base.h | 2 - src/station_cmd.cpp | 24 +++------ src/station_gui.cpp | 6 +-- src/terraform_gui.cpp | 3 +- src/town_cmd.cpp | 6 +-- src/vehicle.cpp | 3 +- src/viewport.cpp | 6 +-- src/waypoint_base.h | 6 --- src/waypoint_cmd.cpp | 8 ++- 27 files changed, 76 insertions(+), 151 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index fe0ae78b4b..2628343444 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -119,7 +119,6 @@ enum HelicopterRotorStates { */ static StationID FindNearestHangar(const Aircraft *v) { - const Station *st; uint best = 0; StationID index = INVALID_STATION; TileIndex vtile = TileVirtXY(v->x_pos, v->y_pos); @@ -140,7 +139,7 @@ static StationID FindNearestHangar(const Aircraft *v) } } - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->owner != v->owner || !(st->facilities & FACIL_AIRPORT) || !st->airport.HasHangar()) continue; const AirportFTAClass *afc = st->airport.GetFTA(); diff --git a/src/base_station_base.h b/src/base_station_base.h index a23a7bf510..a1c935fce5 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -163,8 +163,6 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { static void PostDestructor(size_t index); }; -#define FOR_ALL_BASE_STATIONS(var) FOR_ALL_ITEMS_FROM(BaseStation, station_index, var, 0) - /** * Class defining several overloaded accessors so we don't * have to cast base stations that often @@ -252,8 +250,13 @@ struct SpecializedStation : public BaseStation { assert(IsExpected(st)); return (const T *)st; } + + /** + * Returns an iterable ensemble of all valid stations of type T + * @param from index of the first station to consider + * @return an iterable ensemble of all valid stations of type T + */ + static Pool::IterateWrapper Iterate(size_t from = 0) { return Pool::IterateWrapper(from); } }; -#define FOR_ALL_BASE_STATIONS_OF_TYPE(name, var) FOR_ALL_ITEMS_FROM(name, station_index, var, 0) if (name::IsExpected(var)) - #endif /* BASE_STATION_BASE_H */ diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index 40ac55c893..faf0a9e92b 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -708,8 +708,7 @@ static void Disaster_Zeppeliner_Init() /* Pick a random place, unless we find a small airport */ int x = TileX(Random()) * TILE_SIZE + TILE_SIZE / 2; - Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->airport.tile != INVALID_TILE && (st->airport.type == AT_SMALL || st->airport.type == AT_LARGE)) { x = (TileX(st->airport.tile) + 2) * TILE_SIZE; break; diff --git a/src/economy.cpp b/src/economy.cpp index f115cf9c8e..468111a8e5 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -112,10 +112,9 @@ Money CalculateCompanyValue(const Company *c, bool including_loan) { Owner owner = c->index; - Station *st; uint num = 0; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->owner == owner) num += CountBits((byte)st->facilities); } @@ -188,9 +187,7 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) /* Count stations */ { uint num = 0; - const Station *st; - - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { /* Only count stations that are actually serviced */ if (st->owner == owner && (st->time_since_load <= 20 || st->time_since_unload <= 20)) num += CountBits((byte)st->facilities); } @@ -514,8 +511,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (new_owner != INVALID_OWNER) Company::Get(new_owner)->infrastructure.airport += Company::Get(old_owner)->infrastructure.airport; /* convert owner of stations (including deleted ones, but excluding buoys) */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (st->owner == old_owner) { /* if a company goes bankrupt, set owner to OWNER_NONE so the sign doesn't disappear immediately * also, drawing station window would cause reading invalid company's colour */ @@ -524,8 +520,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) } /* do the same for waypoints (we need to do this here so deleted waypoints are converted too) */ - Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint *wp : Waypoint::Iterate()) { if (wp->owner == old_owner) { wp->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner; } @@ -663,8 +658,7 @@ static void CompaniesGenStatistics() Backup cur_company(_current_company, FILE_LINE); if (!_settings_game.economy.infrastructure_maintenance) { - Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { cur_company.Change(st->owner); CommandCost cost(EXPENSES_PROPERTY, _price[PR_STATION_VALUE] >> 1); SubtractMoneyFromCompany(cost); diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 6eb1d68b2c..b5fbc50ff7 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -56,8 +56,7 @@ void LinkGraphOverlay::RebuildCache() DrawPixelInfo dpi; this->GetWidgetDpi(&dpi); - const Station *sta; - FOR_ALL_STATIONS(sta) { + for (const Station *sta : Station::Iterate()) { if (sta->rect.IsEmpty()) continue; Point pta = this->GetStationMiddle(sta); diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index a8322ff904..7eabf24f57 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1547,7 +1547,6 @@ void NetworkSocketHandler::SendCompanyInformation(Packet *p, const Company *c, c void NetworkPopulateCompanyStats(NetworkCompanyStats *stats) { const Vehicle *v; - const Station *s; memset(stats, 0, sizeof(*stats) * MAX_COMPANIES); @@ -1566,7 +1565,7 @@ void NetworkPopulateCompanyStats(NetworkCompanyStats *stats) } /* Go through all stations and count the types of stations */ - FOR_ALL_STATIONS(s) { + for (const Station *s : Station::Iterate()) { if (Company::IsValidID(s->owner)) { NetworkCompanyStats *npi = &stats[s->owner]; diff --git a/src/openttd.cpp b/src/openttd.cpp index fde01111d7..cf79419cc6 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1313,8 +1313,7 @@ static void CheckCaches() assert(memcmp(&v->cargo, buff, sizeof(VehicleCargoList)) == 0); } - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { for (CargoID c = 0; c < NUM_CARGO; c++) { byte buff[sizeof(StationCargoList)]; memcpy(buff, &st->goods[c].cargo, sizeof(StationCargoList)); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index c10904c8a4..d79cd9410f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -266,8 +266,7 @@ static void InitializeWindowsAndCaches() i->psa->tile = i->location.tile; } } - Station *s; - FOR_ALL_STATIONS(s) { + for (Station *s : Station::Iterate()) { if (s->airport.psa != nullptr) { s->airport.psa->feature = GSF_AIRPORTS; s->airport.psa->tile = s->airport.tile; @@ -587,14 +586,13 @@ bool AfterLoadGame() * recompute the width and height. Doing this unconditionally for all old * savegames simplifies the code. */ if (IsSavegameVersionBefore(SLV_2)) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { st->train_station.w = st->train_station.h = 0; } for (TileIndex t = 0; t < map_size; t++) { if (!IsTileType(t, MP_STATION)) continue; if (_m[t].m5 > 7) continue; // is it a rail station tile? - st = Station::Get(_m[t].m2); + Station *st = Station::Get(_m[t].m2); assert(st->train_station.tile != 0); int dx = TileX(t) - TileX(st->train_station.tile); int dy = TileY(t) - TileY(st->train_station.tile); @@ -650,8 +648,7 @@ bool AfterLoadGame() if (c->president_name != nullptr) c->president_name_1 = SPECSTR_PRESIDENT_NAME; } - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { st->name = CopyFromOldName(st->string_id); /* generating new name would be too much work for little effect, use the station name fallback */ if (st->name != nullptr) st->string_id = STR_SV_STNAME_FALLBACK; @@ -669,8 +666,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_106)) { /* no station is determined by 'tile == INVALID_TILE' now (instead of '0') */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (st->airport.tile == 0) st->airport.tile = INVALID_TILE; if (st->train_station.tile == 0) st->train_station.tile = INVALID_TILE; } @@ -784,8 +780,7 @@ bool AfterLoadGame() * here as AfterLoadVehicles can check it indirectly via the newgrf * code. */ if (IsSavegameVersionBefore(SLV_139)) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (st->airport.tile != INVALID_TILE && st->airport.type == 15) { st->airport.type = AT_OILRIG; } @@ -1398,8 +1393,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_26)) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { st->last_vehicle_type = VEH_INVALID; } } @@ -1420,8 +1414,6 @@ bool AfterLoadGame() /* Time starts at 0 instead of 1920. * Account for this in older games by adding an offset */ if (IsSavegameVersionBefore(SLV_31)) { - Station *st; - Waypoint *wp; Engine *e; Industry *i; Vehicle *v; @@ -1429,8 +1421,8 @@ bool AfterLoadGame() _date += DAYS_TILL_ORIGINAL_BASE_YEAR; _cur_year += ORIGINAL_BASE_YEAR; - FOR_ALL_STATIONS(st) st->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; - FOR_ALL_WAYPOINTS(wp) wp->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; + for (Station *st : Station::Iterate()) st->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; + for (Waypoint *wp : Waypoint::Iterate()) wp->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; FOR_ALL_ENGINES(e) e->intro_date += DAYS_TILL_ORIGINAL_BASE_YEAR; for (Company *c : Company::Iterate()) c->inaugurated_year += ORIGINAL_BASE_YEAR; FOR_ALL_INDUSTRIES(i) i->last_prod_year += ORIGINAL_BASE_YEAR; @@ -1565,8 +1557,7 @@ bool AfterLoadGame() /* Buoys do now store the owner of the previous water tile, which can never * be OWNER_NONE. So replace OWNER_NONE with OWNER_WATER. */ if (IsSavegameVersionBefore(SLV_46)) { - Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint *wp : Waypoint::Iterate()) { if ((wp->facilities & FACIL_DOCK) != 0 && IsTileOwner(wp->xy, OWNER_NONE) && TileHeight(wp->xy) == 0) SetTileOwner(wp->xy, OWNER_WATER); } } @@ -1624,8 +1615,7 @@ bool AfterLoadGame() } else if (IsSavegameVersionBefore(SLV_59)) { /* For some reason non-loading vehicles could be in the station's loading vehicle list */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { std::list::iterator iter; for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end();) { Vehicle *v = *iter; @@ -1704,8 +1694,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_74)) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { for (CargoID c = 0; c < NUM_CARGO; c++) { st->goods[c].last_speed = 0; if (st->goods[c].cargo.AvailableCount() != 0) SetBit(st->goods[c].status, GoodsEntry::GES_RATING); @@ -2037,8 +2026,7 @@ bool AfterLoadGame() /* Station can get named based on an industry type, but the current ones * are not, so mark them as if they are not named by an industry. */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { st->indtype = IT_INVALID; } } @@ -2174,8 +2162,7 @@ bool AfterLoadGame() /* There could be (deleted) stations with invalid owner, set owner to OWNER NONE. * The conversion affects oil rigs and buoys too, but it doesn't matter as * they have st->owner == OWNER_NONE already. */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (!Company::IsValidID(st->owner)) st->owner = OWNER_NONE; } } @@ -2213,8 +2200,7 @@ bool AfterLoadGame() * However, some 0.7 versions might have cargo payment. For those we just * add cargopayment for the vehicles that don't have it. */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { std::list::iterator iter; for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) { /* There are always as many CargoPayments as Vehicles. We need to make the @@ -2252,8 +2238,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_124) && !IsSavegameVersionBefore(SLV_1)) { /* The train station tile area was added, but for really old (TTDPatch) it's already valid. */ - Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint *wp : Waypoint::Iterate()) { if (wp->facilities & FACIL_TRAIN) { wp->train_station.tile = wp->xy; wp->train_station.w = 1; @@ -2443,8 +2428,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_140)) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (st->airport.tile != INVALID_TILE) { st->airport.w = st->airport.GetSpec()->size_x; st->airport.h = st->airport.GetSpec()->size_y; @@ -2548,12 +2532,11 @@ bool AfterLoadGame() * renumber those. First set all affected waypoints to the * highest possible number to get them numbered in the * order they have in the pool. */ - Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint *wp : Waypoint::Iterate()) { if (wp->name != nullptr) wp->town_cn = UINT16_MAX; } - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint* wp : Waypoint::Iterate()) { if (wp->name != nullptr) MakeDefaultName(wp); } } @@ -2806,8 +2789,7 @@ bool AfterLoadGame() } if (!IsSavegameVersionBefore(SLV_145)) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (!(st->facilities & FACIL_AIRPORT)) continue; assert(st->airport.psa != nullptr); @@ -3142,8 +3124,7 @@ bool AfterLoadGame() _settings_game.station.serve_neutral_industries = true; /* Link oil rigs to their industry and back. */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (IsTileType(st->xy, MP_STATION) && IsOilRig(st->xy)) { /* Industry tile is always adjacent during construction by TileDiffXY(0, 1) */ st->industry = Industry::GetByTile(st->xy + TileDiffXY(0, 1)); @@ -3178,8 +3159,7 @@ bool AfterLoadGame() } /* Scan for docking tiles */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (st->ship_station.tile != INVALID_TILE) UpdateStationDockingTiles(st); } } @@ -3189,8 +3169,7 @@ bool AfterLoadGame() /* Station acceptance is some kind of cache */ if (IsSavegameVersionBefore(SLV_127)) { - Station *st; - FOR_ALL_STATIONS(st) UpdateStationAcceptance(st, false); + for (Station *st : Station::Iterate()) UpdateStationAcceptance(st, false); } /* Road stops is 'only' updating some caches */ diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp index d0797212d4..90aa33cf9a 100644 --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -42,8 +42,7 @@ * station where the goods came from is already removed, the source * information is lost. In that case we set it to the position of this * station */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { for (CargoID c = 0; c < NUM_CARGO; c++) { GoodsEntry *ge = &st->goods[c]; @@ -72,8 +71,7 @@ Vehicle *v; FOR_ALL_VEHICLES(v) v->cargo.InvalidateCache(); - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { for (CargoID c = 0; c < NUM_CARGO; c++) st->goods[c].cargo.InvalidateCache(); } } diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index e1dc5cdc21..5b9266c7b4 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -97,8 +97,7 @@ void AfterLoadCompanyStats() for (Company *c : Company::Iterate()) MemSetT(&c->infrastructure, 0); /* Collect airport count. */ - Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if ((st->facilities & FACIL_AIRPORT) && Company::IsValidID(st->owner)) { Company::Get(st->owner)->infrastructure.airport++; } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index ac38bb0cfd..7b091e2f1c 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -57,8 +57,7 @@ void MoveBuoysToWaypoints() } /* Now make the stations waypoints */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if ((st->had_vehicle_of_type & HVOT_WAYPOINT) == 0) continue; StationID index = st->index; @@ -109,8 +108,7 @@ void MoveBuoysToWaypoints() void AfterLoadStations() { /* Update the speclists of all stations to point to the currently loaded custom stations. */ - BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { + for (BaseStation *st : BaseStation::Iterate()) { for (uint i = 0; i < st->num_specs; i++) { if (st->speclist[i].grfid == 0) continue; @@ -376,8 +374,7 @@ static void Ptrs_STNS() if (!IsSavegameVersionBefore(SLV_123)) return; uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (!IsSavegameVersionBefore(SLV_68)) { for (CargoID i = 0; i < num_cargo; i++) { GoodsEntry *ge = &st->goods[i]; @@ -514,9 +511,8 @@ static void RealSave_STNN(BaseStation *bst) static void Save_STNN() { - BaseStation *st; /* Write the stations */ - FOR_ALL_BASE_STATIONS(st) { + for (BaseStation *st : BaseStation::Iterate()) { SlSetArrayIndex(st->index); SlAutolength((AutolengthProc*)RealSave_STNN, st); } @@ -588,8 +584,7 @@ static void Ptrs_STNN() if (IsSavegameVersionBefore(SLV_123)) return; uint num_cargo = IsSavegameVersionBefore(SLV_EXTEND_CARGOTYPES) ? 32 : NUM_CARGO; - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { for (CargoID i = 0; i < num_cargo; i++) { GoodsEntry *ge = &st->goods[i]; if (IsSavegameVersionBefore(SLV_183)) { @@ -606,8 +601,7 @@ static void Ptrs_STNN() SlObject(st, _station_desc); } - Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint *wp : Waypoint::Iterate()) { SlObject(wp, _waypoint_desc); } } diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index a20c51a099..3529c84eb2 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -165,8 +165,7 @@ void ConvertOldMultiheadToNew() void UpdateOldAircraft() { /* set airport_flags to 0 for all airports just to be sure */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { st->airport.flags = 0; // reset airport } diff --git a/src/script/api/script_depotlist.cpp b/src/script/api/script_depotlist.cpp index be00714736..ab2e09cfda 100644 --- a/src/script/api/script_depotlist.cpp +++ b/src/script/api/script_depotlist.cpp @@ -26,8 +26,7 @@ ScriptDepotList::ScriptDepotList(ScriptTile::TransportType transport_type) case ScriptTile::TRANSPORT_AIR: { /* Hangars are not seen as real depots by the depot code. */ - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) { for (uint i = 0; i < st->airport.GetNumHangars(); i++) { this->AddItem(st->airport.GetHangarTile(i)); diff --git a/src/script/api/script_stationlist.cpp b/src/script/api/script_stationlist.cpp index 9c2a56da99..9b9e67e7a6 100644 --- a/src/script/api/script_stationlist.cpp +++ b/src/script/api/script_stationlist.cpp @@ -18,8 +18,7 @@ ScriptStationList::ScriptStationList(ScriptStation::StationType station_type) { - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if ((st->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && (st->facilities & station_type) != 0) this->AddItem(st->index); } } diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index fb55897077..1cb6e32bb1 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -346,8 +346,7 @@ } int num = 0; - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->town == t && (st->facilities & FACIL_AIRPORT) && st->airport.type != AT_OILRIG) num++; } return max(0, 2 - num); diff --git a/src/script/api/script_waypointlist.cpp b/src/script/api/script_waypointlist.cpp index 12f5f6bf15..1c0a804d1c 100644 --- a/src/script/api/script_waypointlist.cpp +++ b/src/script/api/script_waypointlist.cpp @@ -17,8 +17,7 @@ ScriptWaypointList::ScriptWaypointList(ScriptWaypoint::WaypointType waypoint_type) { - const Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (const Waypoint *wp : Waypoint::Iterate()) { if ((wp->facilities & waypoint_type) && (wp->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY || wp->owner == OWNER_NONE)) this->AddItem(wp->index); } diff --git a/src/settings.cpp b/src/settings.cpp index cc29304df3..98c2738764 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1233,8 +1233,7 @@ static bool CheckFreeformEdges(int32 p1) return false; } } - BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { + for (const BaseStation *st : BaseStation::Iterate()) { /* Check if there is a non-deleted buoy on the northern border. */ if (st->IsInUse() && (TileX(st->xy) == 0 || TileY(st->xy) == 0)) { ShowErrorMessage(STR_CONFIG_SETTING_EDGES_NOT_EMPTY, INVALID_STRING_ID, WL_ERROR); diff --git a/src/station.cpp b/src/station.cpp index 59fee57daa..2a343d798a 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -42,8 +42,7 @@ StationKdtree _station_kdtree(Kdtree_StationXYFunc); void RebuildStationKdtree() { std::vector stids; - BaseStation *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { stids.push_back(st->index); } _station_kdtree.Build(stids.begin(), stids.end()); @@ -480,8 +479,7 @@ void Station::RecomputeCatchment() */ /* static */ void Station::RecomputeCatchmentForAll() { - Station *st; - FOR_ALL_STATIONS(st) { st->RecomputeCatchment(); } + for (Station *st : Station::Iterate()) { st->RecomputeCatchment(); } } /************************************************************************/ @@ -660,8 +658,7 @@ Money AirportMaintenanceCost(Owner owner) { Money total_cost = 0; - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->owner == owner && (st->facilities & FACIL_AIRPORT)) { total_cost += _price[PR_INFRASTRUCTURE_AIRPORT] * st->airport.GetSpec()->maintenance_cost; } diff --git a/src/station_base.h b/src/station_base.h index ca5fd61daa..0c33a58edb 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -525,8 +525,6 @@ public: void GetTileArea(TileArea *ta, StationType type) const override; }; -#define FOR_ALL_STATIONS(var) FOR_ALL_BASE_STATIONS_OF_TYPE(Station, var) - /** Iterator to iterate over all tiles belonging to an airport. */ class AirportTileIterator : public OrthogonalTileIterator { private: diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index aa5afb97ce..126e6fd9d7 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -251,8 +251,7 @@ static StringID GenerateStationName(Station *st, TileIndex tile, StationNaming n bool indtypes[NUM_INDUSTRYTYPES]; memset(indtypes, 0, sizeof(indtypes)); - const Station *s; - FOR_ALL_STATIONS(s) { + for (const Station *s : Station::Iterate()) { if (s != st && s->town == t) { if (s->indtype != IT_INVALID) { indtypes[s->indtype] = true; @@ -449,9 +448,7 @@ void Station::MoveSign(TileIndex new_xy) /** Update the virtual coords needed to draw the station sign for all stations. */ void UpdateAllStationVirtCoords() { - BaseStation *st; - - FOR_ALL_BASE_STATIONS(st) { + for (BaseStation *st : BaseStation::Iterate()) { st->UpdateVirtCoord(); } } @@ -2212,11 +2209,10 @@ Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint void UpdateAirportsNoise() { Town *t; - const Station *st; FOR_ALL_TOWNS(t) t->noise_reached = 0; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->airport.tile != INVALID_TILE && st->airport.type != AT_OILRIG) { const AirportSpec *as = st->airport.GetSpec(); AirportTileIterator it(st); @@ -2293,8 +2289,7 @@ CommandCost CmdBuildAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, uint } else { Town *t = ClosestTownFromTile(tile, UINT_MAX); uint num = 0; - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->town == t && (st->facilities & FACIL_AIRPORT) && st->airport.type != AT_OILRIG) num++; } if (num >= 2) { @@ -3824,8 +3819,7 @@ void OnTick_Station() { if (_game_mode == GM_EDITOR) return; - BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { + for (BaseStation *st : BaseStation::Iterate()) { StationHandleSmallTick(st); /* Clean up the link graph about once a week. */ @@ -3848,9 +3842,7 @@ void OnTick_Station() /** Monthly loop for stations. */ void StationMonthlyLoop() { - Station *st; - - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { for (CargoID i = 0; i < NUM_CARGO; i++) { GoodsEntry *ge = &st->goods[i]; SB(ge->status, GoodsEntry::GES_LAST_MONTH, 1, GB(ge->status, GoodsEntry::GES_CURRENT_MONTH, 1)); @@ -3922,9 +3914,7 @@ static uint UpdateStationWaiting(Station *st, CargoID type, uint amount, SourceT static bool IsUniqueStationName(const char *name) { - const Station *st; - - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->name != nullptr && strcmp(st->name, name) == 0) return false; } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index 17b884e50c..a4804528cd 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -229,8 +229,7 @@ protected: this->stations.clear(); - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->owner == owner || (st->owner == OWNER_NONE && HasStationInUse(st->index, true, owner))) { if (this->facilities & st->facilities) { // only stations with selected facilities int num_waiting_cargo = 0; @@ -2242,8 +2241,7 @@ static const T *FindStationsNearby(TileArea ta, bool distant_join) } /* Look for deleted stations */ - const BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { + for (const BaseStation *st : BaseStation::Iterate()) { if (T::IsExpected(st) && !st->IsInUse() && st->owner == _local_company) { /* Include only within station spread (yes, it is strictly less than) */ if (max(DistanceMax(ta.tile, st->xy), DistanceMax(TILE_ADDXY(ta.tile, ta.w - 1, ta.h - 1), st->xy)) < _settings_game.station.station_spread) { diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 2f65bb6101..9f727ce729 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -508,8 +508,7 @@ static void ResetLandscapeConfirmationCallback(Window *w, bool confirmed) _generating_world = false; /* Delete all station signs */ - BaseStation *st; - FOR_ALL_BASE_STATIONS(st) { + for (BaseStation *st : BaseStation::Iterate()) { /* There can be buoys, remove them */ if (IsBuoyTile(st->xy)) DoCommand(st->xy, 0, 0, DC_EXEC | DC_BANKRUPT, CMD_LANDSCAPE_CLEAR); if (!st->IsInUse()) delete st; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 6f907bc3cc..2c7393ce55 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2872,8 +2872,7 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 if (t == nullptr) return CMD_ERROR; /* Stations refer to towns. */ - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->town == t) { /* Non-oil rig stations are always a problem. */ if (!(st->facilities & FACIL_AIRPORT) || st->airport.type != AT_OILRIG) return CMD_ERROR; @@ -3159,8 +3158,7 @@ static CommandCost TownActionBribe(Town *t, DoCommandFlag flags) t->unwanted[_current_company] = 6; /* set all close by station ratings to 0 */ - Station *st; - FOR_ALL_STATIONS(st) { + for (Station *st : Station::Iterate()) { if (st->town == t && st->owner == _current_company) { for (CargoID i = 0; i < NUM_CARGO; i++) st->goods[i].rating = 0; } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 2eaeb38e53..3e14c982e7 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -947,8 +947,7 @@ void CallVehicleTicks() { PerformanceMeasurer framerate(PFE_GL_ECONOMY); - Station *st; - FOR_ALL_STATIONS(st) LoadUnloadStation(st); + for (Station *st : Station::Iterate()) LoadUnloadStation(st); } PerformanceAccumulator::Reset(PFE_GL_TRAINS); PerformanceAccumulator::Reset(PFE_GL_ROADVEHS); diff --git a/src/viewport.cpp b/src/viewport.cpp index 94245cf6c6..27bbdad517 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2247,13 +2247,11 @@ void RebuildViewportKdtree() std::vector items; items.reserve(BaseStation::GetNumItems() + Town::GetNumItems() + Sign::GetNumItems()); - const Station *st; - FOR_ALL_STATIONS(st) { + for (const Station *st : Station::Iterate()) { if (st->sign.kdtree_valid) items.push_back(ViewportSignKdtreeItem::MakeStation(st->index)); } - const Waypoint *wp; - FOR_ALL_WAYPOINTS(wp) { + for (const Waypoint *wp : Waypoint::Iterate()) { if (wp->sign.kdtree_valid) items.push_back(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); } diff --git a/src/waypoint_base.h b/src/waypoint_base.h index 3ebb649ad8..2c7cc530f6 100644 --- a/src/waypoint_base.h +++ b/src/waypoint_base.h @@ -67,10 +67,4 @@ struct Waypoint FINAL : SpecializedStation { } }; -/** - * Iterate over all waypoints. - * @param var The variable used for iteration. - */ -#define FOR_ALL_WAYPOINTS(var) FOR_ALL_BASE_STATIONS_OF_TYPE(Waypoint, var) - #endif /* WAYPOINT_BASE_H */ diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index d55b1b459e..51d791fc28 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -70,10 +70,10 @@ void Waypoint::MoveSign(TileIndex new_xy) */ static Waypoint *FindDeletedWaypointCloseTo(TileIndex tile, StringID str, CompanyID cid) { - Waypoint *wp, *best = nullptr; + Waypoint *best = nullptr; uint thres = 8; - FOR_ALL_WAYPOINTS(wp) { + for (Waypoint *wp : Waypoint::Iterate()) { if (!wp->IsInUse() && wp->string_id == str && wp->owner == cid) { uint cur_dist = DistanceManhattan(tile, wp->xy); @@ -397,9 +397,7 @@ CommandCost RemoveBuoy(TileIndex tile, DoCommandFlag flags) */ static bool IsUniqueWaypointName(const char *name) { - const Waypoint *wp; - - FOR_ALL_WAYPOINTS(wp) { + for (const Waypoint *wp : Waypoint::Iterate()) { if (wp->name != nullptr && strcmp(wp->name, name) == 0) return false; } From 60e3cf8aff9a7b98a0365ab734bebf70607160a1 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 15 Dec 2019 17:10:46 +0100 Subject: [PATCH 11/84] Codechange: Replace FOR_ALL_ENGINE_RENEWS with range-based for loops --- src/autoreplace_base.h | 3 --- src/group_cmd.cpp | 3 +-- src/saveload/autoreplace_sl.cpp | 8 ++------ 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/autoreplace_base.h b/src/autoreplace_base.h index d7295a4db2..c342223a71 100644 --- a/src/autoreplace_base.h +++ b/src/autoreplace_base.h @@ -41,7 +41,4 @@ struct EngineRenew : EngineRenewPool::PoolItem<&_enginerenew_pool> { ~EngineRenew() {} }; -#define FOR_ALL_ENGINE_RENEWS_FROM(var, start) FOR_ALL_ITEMS_FROM(EngineRenew, enginerenew_index, var, start) -#define FOR_ALL_ENGINE_RENEWS(var) FOR_ALL_ENGINE_RENEWS_FROM(var, 0) - #endif /* AUTOREPLACE_BASE_H */ diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 95b7070c73..e16d036207 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -384,10 +384,9 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 /* If we set an autoreplace for the group we delete, remove it. */ if (_current_company < MAX_COMPANIES) { Company *c; - EngineRenew *er; c = Company::Get(_current_company); - FOR_ALL_ENGINE_RENEWS(er) { + for (EngineRenew *er : EngineRenew::Iterate()) { if (er->group_id == g->index) RemoveEngineReplacementForCompany(c, er->from, g->index, flags); } } diff --git a/src/saveload/autoreplace_sl.cpp b/src/saveload/autoreplace_sl.cpp index abfd327554..88f925cc5d 100644 --- a/src/saveload/autoreplace_sl.cpp +++ b/src/saveload/autoreplace_sl.cpp @@ -26,9 +26,7 @@ static const SaveLoad _engine_renew_desc[] = { static void Save_ERNW() { - EngineRenew *er; - - FOR_ALL_ENGINE_RENEWS(er) { + for (EngineRenew *er : EngineRenew::Iterate()) { SlSetArrayIndex(er->index); SlObject(er, _engine_renew_desc); } @@ -53,9 +51,7 @@ static void Load_ERNW() static void Ptrs_ERNW() { - EngineRenew *er; - - FOR_ALL_ENGINE_RENEWS(er) { + for (EngineRenew *er : EngineRenew::Iterate()) { SlObject(er, _engine_renew_desc); } } From 5fce5fa300318db4e87849c2269a0e013d6f89e1 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 15 Dec 2019 17:37:35 +0100 Subject: [PATCH 12/84] Codechange: Replace FOR_ALL_CARGOPACKETS with range-based for loops --- src/cargopacket.cpp | 6 ++---- src/cargopacket.h | 13 ------------- src/saveload/cargopacket_sl.cpp | 7 ++----- 3 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/cargopacket.cpp b/src/cargopacket.cpp index e1af2bc8f5..f5f7c0c033 100644 --- a/src/cargopacket.cpp +++ b/src/cargopacket.cpp @@ -126,8 +126,7 @@ void CargoPacket::Reduce(uint count) */ /* static */ void CargoPacket::InvalidateAllFrom(SourceType src_type, SourceID src) { - CargoPacket *cp; - FOR_ALL_CARGOPACKETS(cp) { + for (CargoPacket *cp : CargoPacket::Iterate()) { if (cp->source_type == src_type && cp->source_id == src) cp->source_id = INVALID_SOURCE; } } @@ -138,8 +137,7 @@ void CargoPacket::Reduce(uint count) */ /* static */ void CargoPacket::InvalidateAllFrom(StationID sid) { - CargoPacket *cp; - FOR_ALL_CARGOPACKETS(cp) { + for (CargoPacket *cp : CargoPacket::Iterate()) { if (cp->source == sid) cp->source = INVALID_STATION; } } diff --git a/src/cargopacket.h b/src/cargopacket.h index a38d46a228..c058bafdbb 100644 --- a/src/cargopacket.h +++ b/src/cargopacket.h @@ -192,19 +192,6 @@ public: static void AfterLoad(); }; -/** - * Iterate over all _valid_ cargo packets from the given start. - * @param var Variable used as "iterator". - * @param start Cargo packet ID of the first packet to iterate over. - */ -#define FOR_ALL_CARGOPACKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(CargoPacket, cargopacket_index, var, start) - -/** - * Iterate over all _valid_ cargo packets from the begin of the pool. - * @param var Variable used as "iterator". - */ -#define FOR_ALL_CARGOPACKETS(var) FOR_ALL_CARGOPACKETS_FROM(var, 0) - /** * Simple collection class for a list of cargo packets. * @tparam Tinst Actual instantiation of this cargo list. diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp index 90aa33cf9a..bb44c663fe 100644 --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -58,8 +58,7 @@ if (IsSavegameVersionBefore(SLV_120)) { /* CargoPacket's source should be either INVALID_STATION or a valid station */ - CargoPacket *cp; - FOR_ALL_CARGOPACKETS(cp) { + for (CargoPacket *cp : CargoPacket::Iterate()) { if (!Station::IsValidID(cp->source)) cp->source = INVALID_STATION; } } @@ -112,9 +111,7 @@ const SaveLoad *GetCargoPacketDesc() */ static void Save_CAPA() { - CargoPacket *cp; - - FOR_ALL_CARGOPACKETS(cp) { + for (CargoPacket *cp : CargoPacket::Iterate()) { SlSetArrayIndex(cp->index); SlObject(cp, GetCargoPacketDesc()); } From fa9769f81a0f96324a7a72f272626c395e002ece Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 15 Dec 2019 17:54:05 +0100 Subject: [PATCH 13/84] Codechange: Replace FOR_ALL_DEPOTS with range-based for loops --- src/depot_base.h | 3 --- src/depot_cmd.cpp | 4 +--- src/saveload/afterload.cpp | 11 ++++------- src/saveload/depot_sl.cpp | 8 ++------ src/saveload/oldloader_sl.cpp | 3 +-- src/script/api/script_depotlist.cpp | 3 +-- src/ship_cmd.cpp | 3 +-- src/town_cmd.cpp | 3 +-- 8 files changed, 11 insertions(+), 27 deletions(-) diff --git a/src/depot_base.h b/src/depot_base.h index b7dd9661b7..aab2b2ae42 100644 --- a/src/depot_base.h +++ b/src/depot_base.h @@ -44,7 +44,4 @@ struct Depot : DepotPool::PoolItem<&_depot_pool> { } }; -#define FOR_ALL_DEPOTS_FROM(var, start) FOR_ALL_ITEMS_FROM(Depot, depot_index, var, start) -#define FOR_ALL_DEPOTS(var) FOR_ALL_DEPOTS_FROM(var, 0) - #endif /* DEPOT_BASE_H */ diff --git a/src/depot_cmd.cpp b/src/depot_cmd.cpp index 1e1e6608f9..a142fbe7d3 100644 --- a/src/depot_cmd.cpp +++ b/src/depot_cmd.cpp @@ -28,9 +28,7 @@ */ static bool IsUniqueDepotName(const char *name) { - const Depot *d; - - FOR_ALL_DEPOTS(d) { + for (const Depot *d : Depot::Iterate()) { if (d->name != nullptr && strcmp(d->name, name) == 0) return false; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index d79cd9410f..f979552be8 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2330,8 +2330,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_128)) { - const Depot *d; - FOR_ALL_DEPOTS(d) { + for (const Depot *d : Depot::Iterate()) { /* At some point, invalid depots were saved into the game (possibly those removed in the past?) * Remove them here, so they don't cause issues further down the line */ if (!IsDepotTile(d->xy)) { @@ -2445,15 +2444,13 @@ bool AfterLoadGame() /* We need to properly number/name the depots. * The first step is making sure none of the depots uses the * 'default' names, after that we can assign the names. */ - Depot *d; - FOR_ALL_DEPOTS(d) d->town_cn = UINT16_MAX; + for (Depot *d : Depot::Iterate()) d->town_cn = UINT16_MAX; - FOR_ALL_DEPOTS(d) MakeDefaultName(d); + for (Depot* d : Depot::Iterate()) MakeDefaultName(d); } if (IsSavegameVersionBefore(SLV_142)) { - Depot *d; - FOR_ALL_DEPOTS(d) d->build_date = _date; + for (Depot *d : Depot::Iterate()) d->build_date = _date; } /* In old versions it was possible to remove an airport while a plane was diff --git a/src/saveload/depot_sl.cpp b/src/saveload/depot_sl.cpp index 351cfc66a6..eb4b9384bc 100644 --- a/src/saveload/depot_sl.cpp +++ b/src/saveload/depot_sl.cpp @@ -30,9 +30,7 @@ static const SaveLoad _depot_desc[] = { static void Save_DEPT() { - Depot *depot; - - FOR_ALL_DEPOTS(depot) { + for (Depot *depot : Depot::Iterate()) { SlSetArrayIndex(depot->index); SlObject(depot, _depot_desc); } @@ -53,9 +51,7 @@ static void Load_DEPT() static void Ptrs_DEPT() { - Depot *depot; - - FOR_ALL_DEPOTS(depot) { + for (Depot *depot : Depot::Iterate()) { SlObject(depot, _depot_desc); if (IsSavegameVersionBefore(SLV_141)) depot->town = Town::Get((size_t)depot->town); } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 3a3efa34db..d2befa84dc 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -109,8 +109,7 @@ static void FixTTDMapArray() static void FixTTDDepots() { - const Depot *d; - FOR_ALL_DEPOTS_FROM(d, 252) { + for (const Depot *d : Depot::Iterate(252)) { if (!IsDepotTile(d->xy) || GetDepotIndex(d->xy) != d->index) { /** Workaround for SVXConverter bug, depots 252-255 could be invalid */ delete d; diff --git a/src/script/api/script_depotlist.cpp b/src/script/api/script_depotlist.cpp index ab2e09cfda..4b07636ce5 100644 --- a/src/script/api/script_depotlist.cpp +++ b/src/script/api/script_depotlist.cpp @@ -38,8 +38,7 @@ ScriptDepotList::ScriptDepotList(ScriptTile::TransportType transport_type) } /* Handle 'standard' depots. */ - const Depot *depot; - FOR_ALL_DEPOTS(depot) { + for (const Depot *depot : Depot::Iterate()) { if ((::GetTileOwner(depot->xy) == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && ::IsTileType(depot->xy, tile_type)) this->AddItem(depot->xy); } } diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 7e9d6a30df..35edda113e 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -144,7 +144,6 @@ void Ship::GetImage(Direction direction, EngineImageType image_type, VehicleSpri static const Depot *FindClosestShipDepot(const Vehicle *v, uint max_distance) { /* Find the closest depot */ - const Depot *depot; const Depot *best_depot = nullptr; /* If we don't have a maximum distance, i.e. distance = 0, * we want to find any depot so the best distance of no @@ -153,7 +152,7 @@ static const Depot *FindClosestShipDepot(const Vehicle *v, uint max_distance) * further away than max_distance can safely be ignored. */ uint best_dist = max_distance == 0 ? UINT_MAX : max_distance + 1; - FOR_ALL_DEPOTS(depot) { + for (const Depot *depot : Depot::Iterate()) { TileIndex tile = depot->xy; if (IsShipDepotTile(tile) && IsTileOwner(tile, v->owner)) { uint dist = DistanceManhattan(tile, v->tile); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 2c7393ce55..cf539b09b3 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2883,8 +2883,7 @@ CommandCost CmdDeleteTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 } /* Depots refer to towns. */ - const Depot *d; - FOR_ALL_DEPOTS(d) { + for (const Depot *d : Depot::Iterate()) { if (d->town == t) return CMD_ERROR; } From 1c92ba8ebed55e5455d6f57508db8ce55071d6eb Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 15 Dec 2019 18:14:51 +0100 Subject: [PATCH 14/84] Codechange: Replace FOR_ALL_CARGO_PAYMENTS with range-based for loops --- src/economy_base.h | 13 ------------- src/saveload/afterload.cpp | 3 +-- src/saveload/economy_sl.cpp | 6 ++---- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/economy_base.h b/src/economy_base.h index 3bafb8d7ee..5c9d79b8c8 100644 --- a/src/economy_base.h +++ b/src/economy_base.h @@ -47,17 +47,4 @@ struct CargoPayment : CargoPaymentPool::PoolItem<&_cargo_payment_pool> { void SetCargo(CargoID ct) { this->ct = ct; } }; -/** - * Iterate over all cargo payments from a given start position. - * @param var The variable used for iterating. - * @param start The start of the iteration. - */ -#define FOR_ALL_CARGO_PAYMENTS_FROM(var, start) FOR_ALL_ITEMS_FROM(CargoPayment, cargo_payment_index, var, start) - -/** - * Iterate over all cargo payments. - * @param var The variable used for iterating. - */ -#define FOR_ALL_CARGO_PAYMENTS(var) FOR_ALL_CARGO_PAYMENTS_FROM(var, 0) - #endif /* ECONOMY_BASE_H */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index f979552be8..eb438515b6 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -822,8 +822,7 @@ bool AfterLoadGame() } /* Fix the cache for cargo payments. */ - CargoPayment *cp; - FOR_ALL_CARGO_PAYMENTS(cp) { + for (CargoPayment *cp : CargoPayment::Iterate()) { cp->front->cargo_payment = cp; cp->current_station = cp->front->last_station_visited; } diff --git a/src/saveload/economy_sl.cpp b/src/saveload/economy_sl.cpp index 6737ac2f3f..637d2529c6 100644 --- a/src/saveload/economy_sl.cpp +++ b/src/saveload/economy_sl.cpp @@ -72,8 +72,7 @@ static const SaveLoad _cargopayment_desc[] = { static void Save_CAPY() { - CargoPayment *cp; - FOR_ALL_CARGO_PAYMENTS(cp) { + for (CargoPayment *cp : CargoPayment::Iterate()) { SlSetArrayIndex(cp->index); SlObject(cp, _cargopayment_desc); } @@ -91,8 +90,7 @@ static void Load_CAPY() static void Ptrs_CAPY() { - CargoPayment *cp; - FOR_ALL_CARGO_PAYMENTS(cp) { + for (CargoPayment *cp : CargoPayment::Iterate()) { SlObject(cp, _cargopayment_desc); } } From 1f6b3a37f9c39adb22eb61d3153b0c62bfa20551 Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 15 Dec 2019 22:45:18 +0100 Subject: [PATCH 15/84] Codechange: Replace FOR_ALL_ENGINES with range-based for loops --- src/autoreplace_gui.cpp | 3 +-- src/build_vehicle_gui.cpp | 12 ++++-------- src/company_gui.cpp | 5 ++--- src/depot_gui.cpp | 6 ++---- src/elrail.cpp | 3 +-- src/engine.cpp | 22 +++++++--------------- src/engine_base.h | 16 +++++++++++----- src/newgrf.cpp | 16 +++++----------- src/newgrf_engine.cpp | 3 +-- src/rail.cpp | 6 ++---- src/road.cpp | 12 ++++-------- src/saveload/afterload.cpp | 6 ++---- src/saveload/engine_sl.cpp | 6 ++---- src/saveload/vehicle_sl.cpp | 9 ++++----- src/script/api/script_enginelist.cpp | 3 +-- src/vehicle.cpp | 3 +-- 16 files changed, 50 insertions(+), 81 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 3999597a0f..19df0f1d80 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -124,8 +124,7 @@ class ReplaceVehicleWindow : public Window { GUIEngineList *list = &this->engines[side]; list->clear(); - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, type) { + for (const Engine *e : Engine::IterateType(type)) { if (!draw_left && !this->show_hidden_engines && e->IsHidden(_local_company)) continue; EngineID eid = e->index; switch (type) { diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index a1290532af..c457b0f195 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1260,8 +1260,7 @@ struct BuildVehicleWindow : Window { * Also check to see if the previously selected engine is still available, * and if not, reset selection to INVALID_ENGINE. This could be the case * when engines become obsolete and are removed */ - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue; EngineID eid = e->index; const RailVehicleInfo *rvi = &e->u.rail; @@ -1304,8 +1303,7 @@ struct BuildVehicleWindow : Window { this->eng_list.clear(); - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (const Engine *e : Engine::IterateType(VEH_ROAD)) { if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue; EngineID eid = e->index; if (!IsEngineBuildable(eid, VEH_ROAD, _local_company)) continue; @@ -1324,8 +1322,7 @@ struct BuildVehicleWindow : Window { EngineID sel_id = INVALID_ENGINE; this->eng_list.clear(); - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_SHIP) { + for (const Engine *e : Engine::IterateType(VEH_SHIP)) { if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue; EngineID eid = e->index; if (!IsEngineBuildable(eid, VEH_SHIP, _local_company)) continue; @@ -1349,8 +1346,7 @@ struct BuildVehicleWindow : Window { * Also check to see if the previously selected plane is still available, * and if not, reset selection to INVALID_ENGINE. This could be the case * when planes become obsolete and are removed */ - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_AIRCRAFT) { + for (const Engine *e : Engine::IterateType(VEH_AIRCRAFT)) { if (!this->show_hidden_engines && e->IsHidden(_local_company)) continue; EngineID eid = e->index; if (!IsEngineBuildable(eid, VEH_AIRCRAFT, _local_company)) continue; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index c09dab139f..92c6ccb535 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -1825,8 +1825,7 @@ struct CompanyInfrastructureWindow : Window this->roadtypes = ROADTYPES_NONE; /* Find the used railtypes. */ - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; this->railtypes |= GetRailTypeInfo(e->u.rail.railtype)->introduces_railtypes; @@ -1836,7 +1835,7 @@ struct CompanyInfrastructureWindow : Window this->railtypes = AddDateIntroducedRailTypes(this->railtypes, MAX_DAY); /* Find the used roadtypes. */ - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (const Engine *e : Engine::IterateType(VEH_ROAD)) { if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; this->roadtypes |= GetRoadTypeInfo(e->u.road.roadtype)->introduces_roadtypes; diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index 430d023814..f525e714c5 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -170,8 +170,7 @@ static void InitBlocksizeForVehicles(VehicleType type, EngineImageType image_typ int max_extend_right = 0; uint max_height = 0; - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, type) { + for (const Engine *e : Engine::IterateType(type)) { if (!e->IsEnabled()) continue; EngineID eid = e->index; @@ -222,8 +221,7 @@ void InitDepotWindowBlockSizes() _consistent_train_width = TRAININFO_DEFAULT_VEHICLE_WIDTH; bool first = true; - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { if (!e->IsEnabled()) continue; uint w = TRAININFO_DEFAULT_VEHICLE_WIDTH; diff --git a/src/elrail.cpp b/src/elrail.cpp index b169479da3..eacb21f246 100644 --- a/src/elrail.cpp +++ b/src/elrail.cpp @@ -599,8 +599,7 @@ bool SettingsDisableElrail(int32 p1) const RailType new_railtype = disable ? RAILTYPE_RAIL : RAILTYPE_ELECTRIC; /* walk through all train engines */ - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (Engine *e : Engine::IterateType(VEH_TRAIN)) { RailVehicleInfo *rv_info = &e->u.rail; /* if it is an electric rail engine and its railtype is the wrong one */ if (rv_info->engclass == 2 && rv_info->railtype == old_railtype) { diff --git a/src/engine.cpp b/src/engine.cpp index 4baf906e5b..d0333b8f44 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -618,8 +618,7 @@ void SetYearEngineAgingStops() /* Determine last engine aging year, default to 2050 as previously. */ _year_engine_aging_stops = 2050; - const Engine *e; - FOR_ALL_ENGINES(e) { + for (const Engine *e : Engine::Iterate()) { const EngineInfo *ei = &e->info; /* Exclude certain engines */ @@ -694,11 +693,10 @@ void StartupOneEngine(Engine *e, Date aging_date) */ void StartupEngines() { - Engine *e; /* Aging of vehicles stops, so account for that when starting late */ const Date aging_date = min(_date, ConvertYMDToDate(_year_engine_aging_stops, 0, 1)); - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { StartupOneEngine(e, aging_date); } @@ -811,8 +809,7 @@ void EnginesDailyLoop() if (_cur_year >= _year_engine_aging_stops) return; - Engine *e; - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { EngineID i = e->index; if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) { if (e->preview_company != INVALID_COMPANY) { @@ -848,8 +845,7 @@ void EnginesDailyLoop() */ void ClearEnginesHiddenFlagOfCompany(CompanyID cid) { - Engine *e; - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { SB(e->company_hidden, cid, 1, 0); } } @@ -973,8 +969,7 @@ static void NewVehicleAvailable(Engine *e) void EnginesMonthlyLoop() { if (_cur_year < _year_engine_aging_stops) { - Engine *e; - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { /* Age the vehicle */ if ((e->flags & ENGINE_AVAILABLE) && e->age != MAX_DAY) { e->age++; @@ -1015,9 +1010,7 @@ void EnginesMonthlyLoop() */ static bool IsUniqueEngineName(const char *name) { - const Engine *e; - - FOR_ALL_ENGINES(e) { + for (const Engine *e : Engine::Iterate()) { if (e->name != nullptr && strcmp(e->name, name) == 0) return false; } @@ -1138,10 +1131,9 @@ bool IsEngineRefittable(EngineID engine) */ void CheckEngines() { - const Engine *e; Date min_date = INT32_MAX; - FOR_ALL_ENGINES(e) { + for (const Engine *e : Engine::Iterate()) { if (!e->IsEnabled()) continue; /* We have an available engine... yay! */ diff --git a/src/engine_base.h b/src/engine_base.h index df43f3f781..1328f66a18 100644 --- a/src/engine_base.h +++ b/src/engine_base.h @@ -141,6 +141,17 @@ struct Engine : EnginePool::PoolItem<&_engine_pool> { } uint32 GetGRFID() const; + + /** + * Returns an iterable ensemble of all valid engines of the given type + * @param vt the VehicleType for engines to be valid + * @param from index of the first engine to consider + * @return an iterable ensemble of all valid engines of the given type + */ + static Pool::IterateWrapper IterateType(VehicleType vt, size_t from = 0) + { + return Pool::IterateWrapper(from, [vt](size_t index) { return Engine::Get(index)->type == vt; }); + } }; struct EngineIDMapping { @@ -165,11 +176,6 @@ struct EngineOverrideManager : std::vector { extern EngineOverrideManager _engine_mngr; -#define FOR_ALL_ENGINES_FROM(var, start) FOR_ALL_ITEMS_FROM(Engine, engine_index, var, start) -#define FOR_ALL_ENGINES(var) FOR_ALL_ENGINES_FROM(var, 0) - -#define FOR_ALL_ENGINES_OF_TYPE(e, engine_type) FOR_ALL_ENGINES(e) if (e->type == engine_type) - static inline const EngineInfo *EngInfo(EngineID e) { return &Engine::Get(e)->info; diff --git a/src/newgrf.cpp b/src/newgrf.cpp index ce1b2babe6..a6a48b1ca1 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -8555,8 +8555,7 @@ void ResetNewGRFData() _gted = CallocT(Engine::GetPoolSize()); /* Fill rail type label temporary data for default trains */ - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { _gted[e->index].railtypelabel = GetRailTypeInfo(e->u.rail.railtype)->label; } @@ -8772,9 +8771,7 @@ static const CargoLabel * const _default_refitmasks[] = { */ static void CalculateRefitMasks() { - Engine *e; - - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { EngineID engine = e->index; EngineInfo *ei = &e->info; bool only_defaultcargo; ///< Set if the vehicle shall carry only the default cargo @@ -8888,9 +8885,7 @@ static void FinaliseCanals() /** Check for invalid engines */ static void FinaliseEngineArray() { - Engine *e; - - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { if (e->GetGRF() == nullptr) { const EngineIDMapping &eid = _engine_mngr[e->index]; if (eid.grfid != INVALID_GRFID || eid.internal_id != eid.substitute_id) { @@ -9684,8 +9679,7 @@ static void AfterLoadGRFs() InitRailTypes(); InitRoadTypes(); - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (Engine *e : Engine::IterateType(VEH_ROAD)) { if (_gted[e->index].rv_max_speed != 0) { /* Set RV maximum speed from the mph/0.8 unit value */ e->u.road.max_speed = _gted[e->index].rv_max_speed * 4; @@ -9717,7 +9711,7 @@ static void AfterLoadGRFs() e->info.climates = 0; } - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (Engine *e : Engine::IterateType(VEH_TRAIN)) { RailType railtype = GetRailTypeByLabel(_gted[e->index].railtypelabel); if (railtype == INVALID_RAILTYPE) { /* Rail type is not available, so disable this engine */ diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index dba05ebc4b..dc0e1cfe01 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -1236,8 +1236,7 @@ void CommitVehicleListOrderChanges() { /* Pre-sort engines by scope-grfid and local index */ std::vector ordering; - Engine *e; - FOR_ALL_ENGINES(e) { + for (const Engine *e : Engine::Iterate()) { ordering.push_back(e->index); } std::sort(ordering.begin(), ordering.end(), EnginePreSort); diff --git a/src/rail.cpp b/src/rail.cpp index 260404dbd5..f3c2c3dcce 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -267,8 +267,7 @@ RailTypes GetCompanyRailtypes(CompanyID company, bool introduces) { RailTypes rts = RAILTYPES_NONE; - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { const EngineInfo *ei = &e->info; if (HasBit(ei->climates, _settings_game.game_creation.landscape) && @@ -299,8 +298,7 @@ RailTypes GetRailTypes(bool introduces) { RailTypes rts = RAILTYPES_NONE; - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { const EngineInfo *ei = &e->info; if (!HasBit(ei->climates, _settings_game.game_creation.landscape)) continue; diff --git a/src/road.cpp b/src/road.cpp index 3b3f89272e..aa9935ad41 100644 --- a/src/road.cpp +++ b/src/road.cpp @@ -189,8 +189,7 @@ RoadTypes GetCompanyRoadTypes(CompanyID company, bool introduces) { RoadTypes rts = ROADTYPES_NONE; - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (const Engine *e : Engine::IterateType(VEH_ROAD)) { const EngineInfo *ei = &e->info; if (HasBit(ei->climates, _settings_game.game_creation.landscape) && @@ -218,8 +217,7 @@ RoadTypes GetRoadTypes(bool introduces) { RoadTypes rts = ROADTYPES_NONE; - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (const Engine *e : Engine::IterateType(VEH_ROAD)) { const EngineInfo *ei = &e->info; if (!HasBit(ei->climates, _settings_game.game_creation.landscape)) continue; @@ -282,8 +280,7 @@ RoadTypes ExistingRoadTypes(CompanyID c) RoadTypes known_roadtypes = ROADTYPES_NONE; /* Find used roadtypes */ - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (Engine *e : Engine::IterateType(VEH_ROAD)) { /* Check if the roadtype can be used in the current climate */ if (!HasBit(e->info.climates, _settings_game.game_creation.landscape)) continue; @@ -319,8 +316,7 @@ bool CanBuildRoadTypeInfrastructure(RoadType roadtype, CompanyID company) * and if we can build new ones */ if (_settings_game.vehicle.max_roadveh > 0 && HasBit(roadtypes, roadtype)) { /* Can we actually build the vehicle type? */ - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { + for (const Engine *e : Engine::IterateType(VEH_ROAD)) { if (!HasBit(e->company_avail, company)) continue; if (HasPowerOnRoad(e->u.road.roadtype, roadtype) || HasPowerOnRoad(roadtype, e->u.road.roadtype)) return true; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index eb438515b6..fb3b1ecf28 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1413,7 +1413,6 @@ bool AfterLoadGame() /* Time starts at 0 instead of 1920. * Account for this in older games by adding an offset */ if (IsSavegameVersionBefore(SLV_31)) { - Engine *e; Industry *i; Vehicle *v; @@ -1422,7 +1421,7 @@ bool AfterLoadGame() for (Station *st : Station::Iterate()) st->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; for (Waypoint *wp : Waypoint::Iterate()) wp->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; - FOR_ALL_ENGINES(e) e->intro_date += DAYS_TILL_ORIGINAL_BASE_YEAR; + for (Engine *e : Engine::Iterate()) e->intro_date += DAYS_TILL_ORIGINAL_BASE_YEAR; for (Company *c : Company::Iterate()) c->inaugurated_year += ORIGINAL_BASE_YEAR; FOR_ALL_INDUSTRIES(i) i->last_prod_year += ORIGINAL_BASE_YEAR; @@ -2044,8 +2043,7 @@ bool AfterLoadGame() if (c->bankrupt_asked == 0xFF) c->bankrupt_asked = 0xFFFF; } - Engine *e; - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { if (e->company_avail == 0xFF) e->company_avail = 0xFFFF; } diff --git a/src/saveload/engine_sl.cpp b/src/saveload/engine_sl.cpp index 98cb4d0a3c..4ba38d04bb 100644 --- a/src/saveload/engine_sl.cpp +++ b/src/saveload/engine_sl.cpp @@ -86,8 +86,7 @@ Engine *GetTempDataEngine(EngineID index) static void Save_ENGN() { - Engine *e; - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { SlSetArrayIndex(e->index); SlObject(e, _engine_desc); } @@ -118,8 +117,7 @@ static void Load_ENGN() */ void CopyTempEngineData() { - Engine *e; - FOR_ALL_ENGINES(e) { + for (Engine *e : Engine::Iterate()) { if (e->index >= _temp_engine.size()) break; const Engine *se = GetTempDataEngine(e->index); diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 3529c84eb2..74a01616bb 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -215,11 +215,10 @@ static void CheckValidVehicles() size_t total_engines = Engine::GetPoolSize(); EngineID first_engine[4] = { INVALID_ENGINE, INVALID_ENGINE, INVALID_ENGINE, INVALID_ENGINE }; - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, VEH_TRAIN) { first_engine[VEH_TRAIN] = e->index; break; } - FOR_ALL_ENGINES_OF_TYPE(e, VEH_ROAD) { first_engine[VEH_ROAD] = e->index; break; } - FOR_ALL_ENGINES_OF_TYPE(e, VEH_SHIP) { first_engine[VEH_SHIP] = e->index; break; } - FOR_ALL_ENGINES_OF_TYPE(e, VEH_AIRCRAFT) { first_engine[VEH_AIRCRAFT] = e->index; break; } + for (const Engine *e : Engine::IterateType(VEH_TRAIN)) { first_engine[VEH_TRAIN] = e->index; break; } + for (const Engine *e : Engine::IterateType(VEH_ROAD)) { first_engine[VEH_ROAD] = e->index; break; } + for (const Engine *e : Engine::IterateType(VEH_SHIP)) { first_engine[VEH_SHIP] = e->index; break; } + for (const Engine *e : Engine::IterateType(VEH_AIRCRAFT)) { first_engine[VEH_AIRCRAFT] = e->index; break; } Vehicle *v; FOR_ALL_VEHICLES(v) { diff --git a/src/script/api/script_enginelist.cpp b/src/script/api/script_enginelist.cpp index 3f4b5d3ff2..c6f594cc7e 100644 --- a/src/script/api/script_enginelist.cpp +++ b/src/script/api/script_enginelist.cpp @@ -15,8 +15,7 @@ ScriptEngineList::ScriptEngineList(ScriptVehicle::VehicleType vehicle_type) { - Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, (::VehicleType)vehicle_type) { + for (const Engine *e : Engine::IterateType((::VehicleType)vehicle_type)) { if (ScriptObject::GetCompany() == OWNER_DEITY || HasBit(e->company_avail, ScriptObject::GetCompany())) this->AddItem(e->index); } } diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 3e14c982e7..57e00418ac 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1779,8 +1779,7 @@ bool CanBuildVehicleInfrastructure(VehicleType type, byte subtype) /* We can build vehicle infrastructure when we may build the vehicle type */ if (max > 0) { /* Can we actually build the vehicle type? */ - const Engine *e; - FOR_ALL_ENGINES_OF_TYPE(e, type) { + for (const Engine *e : Engine::IterateType(type)) { if (type == VEH_ROAD && GetRoadTramType(e->u.road.roadtype) != (RoadTramType)subtype) continue; if (HasBit(e->company_avail, _local_company)) return true; } From f58ce3db19be038e2a0725b2dd28de9d6c27d416 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 16 Dec 2019 17:53:40 +0100 Subject: [PATCH 16/84] Codechange: Replace FOR_ALL_GOALS with range-based for loops --- src/economy.cpp | 3 +-- src/goal_base.h | 3 --- src/goal_gui.cpp | 14 +++++--------- src/saveload/goal_sl.cpp | 3 +-- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 468111a8e5..b0e723c578 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -532,8 +532,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) } /* Remove Game Script created Goals, CargoMonitors and Story pages. */ - Goal *g; - FOR_ALL_GOALS(g) { + for (Goal *g : Goal::Iterate()) { if (g->company == old_owner) delete g; } diff --git a/src/goal_base.h b/src/goal_base.h index d5e0f602db..ceeb0ef933 100644 --- a/src/goal_base.h +++ b/src/goal_base.h @@ -37,7 +37,4 @@ struct Goal : GoalPool::PoolItem<&_goal_pool> { inline ~Goal() { free(this->text); free(this->progress); } }; -#define FOR_ALL_GOALS_FROM(var, start) FOR_ALL_ITEMS_FROM(Goal, goal_index, var, start) -#define FOR_ALL_GOALS(var) FOR_ALL_GOALS_FROM(var, 0) - #endif /* GOAL_BASE_H */ diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 087195fd95..7a77b30146 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -66,8 +66,7 @@ struct GoalListWindow : public Window { int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_GOAL_LIST, WD_FRAMERECT_TOP); int num = 0; - const Goal *s; - FOR_ALL_GOALS(s) { + for (const Goal *s : Goal::Iterate()) { if (s->company == INVALID_COMPANY) { y--; if (y == 0) { @@ -86,7 +85,7 @@ struct GoalListWindow : public Window { y -= 2; // "Company specific goals:" line. if (y < 0) return; - FOR_ALL_GOALS(s) { + for (const Goal *s : Goal::Iterate()) { if (s->company == this->window_number) { y--; if (y == 0) { @@ -158,8 +157,7 @@ struct GoalListWindow : public Window { /* Count number of (non) awarded goals. */ uint num_global = 0; uint num_company = 0; - const Goal *s; - FOR_ALL_GOALS(s) { + for (const Goal *s : Goal::Iterate()) { if (s->company == INVALID_COMPANY) { num_global++; } else if (s->company == this->window_number) { @@ -207,8 +205,7 @@ struct GoalListWindow : public Window { bool rtl = _current_text_dir == TD_RTL; uint num = 0; - const Goal *s; - FOR_ALL_GOALS(s) { + for (const Goal *s : Goal::Iterate()) { if (global_section ? s->company == INVALID_COMPANY : (s->company == this->window_number && s->company != INVALID_COMPANY)) { if (IsInsideMM(pos, 0, cap)) { switch (column) { @@ -278,8 +275,7 @@ struct GoalListWindow : public Window { /* Calculate progress column width. */ uint max_width = 0; - Goal *s; - FOR_ALL_GOALS(s) { + for (const Goal *s : Goal::Iterate()) { if (s->progress != nullptr) { SetDParamStr(0, s->progress); StringID str = s->completed ? STR_GOALS_PROGRESS_COMPLETE : STR_GOALS_PROGRESS; diff --git a/src/saveload/goal_sl.cpp b/src/saveload/goal_sl.cpp index 57ad7c97ad..4ee9f39ebe 100644 --- a/src/saveload/goal_sl.cpp +++ b/src/saveload/goal_sl.cpp @@ -26,8 +26,7 @@ static const SaveLoad _goals_desc[] = { static void Save_GOAL() { - Goal *s; - FOR_ALL_GOALS(s) { + for (Goal *s : Goal::Iterate()) { SlSetArrayIndex(s->index); SlObject(s, _goals_desc); } From 4ae829cb272225c7e07e233a94c2d945077f432a Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 16 Dec 2019 18:01:57 +0100 Subject: [PATCH 17/84] Codechange: Replace FOR_ALL_GROUPS with range-based for loops --- src/company_cmd.cpp | 3 +-- src/company_gui.cpp | 6 ++--- src/economy.cpp | 3 +-- src/group.h | 3 --- src/group_cmd.cpp | 34 ++++++++++------------------- src/group_gui.cpp | 3 +-- src/saveload/group_sl.cpp | 4 +--- src/script/api/script_grouplist.cpp | 3 +-- 8 files changed, 18 insertions(+), 41 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 97be03fa90..4fa8eced26 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -517,8 +517,7 @@ void ResetCompanyLivery(Company *c) c->livery[scheme].colour2 = c->colour; } - Group *g; - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { if (g->owner == c->index) { g->livery.in_use = 0; g->livery.colour1 = c->colour; diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 92c6ccb535..423efcb01f 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -658,8 +658,7 @@ private: GUIGroupList list; VehicleType vtype = (VehicleType)(this->livery_class - LC_GROUP_RAIL); - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->owner == owner && g->vehicle_type == vtype) { list.push_back(g); } @@ -750,8 +749,7 @@ public: } /* And group names */ - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->owner == (CompanyID)this->window_number) { SetDParam(0, g->index); d = maxdim(d, GetStringBoundingBox(STR_GROUP_NAME)); diff --git a/src/economy.cpp b/src/economy.cpp index b0e723c578..9250cd930a 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -410,8 +410,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (new_owner == INVALID_OWNER) { RemoveAllGroupsForCompany(old_owner); } else { - Group *g; - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { if (g->owner == old_owner) g->owner = new_owner; } } diff --git a/src/group.h b/src/group.h index 58d9bc53fd..aeb7f581a8 100644 --- a/src/group.h +++ b/src/group.h @@ -95,9 +95,6 @@ static inline bool IsAllGroupID(GroupID id_g) return id_g == ALL_GROUP; } -#define FOR_ALL_GROUPS_FROM(var, start) FOR_ALL_ITEMS_FROM(Group, group_index, var, start) -#define FOR_ALL_GROUPS(var) FOR_ALL_GROUPS_FROM(var, 0) - uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e); uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type); diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index e16d036207..a13cd5f384 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -109,8 +109,7 @@ void GroupStatistics::Clear() } /* Recalculate */ - Group *g; - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { g->statistics.Clear(); } @@ -190,8 +189,7 @@ void GroupStatistics::Clear() } /* Recalculate */ - Group *g; - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { g->statistics.ClearProfits(); } @@ -215,8 +213,7 @@ void GroupStatistics::Clear() } /* Recalculate */ - Group *g; - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { if (g->owner != company) continue; g->statistics.ClearAutoreplace(); } @@ -280,8 +277,7 @@ void PropagateChildLivery(const Group *g) } } - Group *cg; - FOR_ALL_GROUPS(cg) { + for (Group *cg : Group::Iterate()) { if (cg->parent == g->index) { if (!HasBit(cg->livery.in_use, 0)) cg->livery.colour1 = g->livery.colour1; if (!HasBit(cg->livery.in_use, 1)) cg->livery.colour2 = g->livery.colour2; @@ -370,8 +366,7 @@ CommandCost CmdDeleteGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 DoCommand(0, p1, 0, flags, CMD_REMOVE_ALL_VEHICLES_GROUP); /* Delete sub-groups */ - Group *gp; - FOR_ALL_GROUPS(gp) { + for (const Group *gp : Group::Iterate()) { if (gp->parent == g->index) { DoCommand(0, gp->index, 0, flags, CMD_DELETE_GROUP); } @@ -683,8 +678,7 @@ static void SetGroupReplaceProtection(Group *g, bool protect) { g->replace_protection = protect; - Group *pg; - FOR_ALL_GROUPS(pg) { + for (Group *pg : Group::Iterate()) { if (pg->parent == g->index) SetGroupReplaceProtection(pg, protect); } } @@ -797,8 +791,7 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e) { uint count = 0; const Engine *e = Engine::Get(id_e); - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->parent == id_g) count += GetGroupNumEngines(company, g->index, id_e); } return count + GroupStatistics::Get(company, id_g, e->type).num_engines[id_e]; @@ -815,8 +808,7 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e) uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type) { uint count = 0; - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->parent == id_g) count += GetGroupNumVehicle(company, g->index, type); } return count + GroupStatistics::Get(company, id_g, type).num_vehicle; @@ -833,8 +825,7 @@ uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type) uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type) { uint count = 0; - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->parent == id_g) count += GetGroupNumProfitVehicle(company, g->index, type); } return count + GroupStatistics::Get(company, id_g, type).num_profit_vehicle; @@ -851,8 +842,7 @@ uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type) Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type) { Money sum = 0; - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->parent == id_g) sum += GetGroupProfitLastYear(company, g->index, type); } return sum + GroupStatistics::Get(company, id_g, type).profit_last_year; @@ -860,9 +850,7 @@ Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type) void RemoveAllGroupsForCompany(const CompanyID company) { - Group *g; - - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { if (company == g->owner) delete g; } } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index b655433752..256c85ba4f 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -178,8 +178,7 @@ private: GUIGroupList list; - const Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->owner == owner && g->vehicle_type == this->vli.vtype) { list.push_back(g); } diff --git a/src/saveload/group_sl.cpp b/src/saveload/group_sl.cpp index 16ef117efc..33c63ee44f 100644 --- a/src/saveload/group_sl.cpp +++ b/src/saveload/group_sl.cpp @@ -31,9 +31,7 @@ static const SaveLoad _group_desc[] = { static void Save_GRPS() { - Group *g; - - FOR_ALL_GROUPS(g) { + for (Group *g : Group::Iterate()) { SlSetArrayIndex(g->index); SlObject(g, _group_desc); } diff --git a/src/script/api/script_grouplist.cpp b/src/script/api/script_grouplist.cpp index 2a99caf33a..569b44634c 100644 --- a/src/script/api/script_grouplist.cpp +++ b/src/script/api/script_grouplist.cpp @@ -15,8 +15,7 @@ ScriptGroupList::ScriptGroupList() { - Group *g; - FOR_ALL_GROUPS(g) { + for (const Group *g : Group::Iterate()) { if (g->owner == ScriptObject::GetCompany()) this->AddItem(g->index); } } From 00c2a98cf395d6e2a85290048e7be7a7f6ce0d04 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 16 Dec 2019 18:51:20 +0100 Subject: [PATCH 18/84] Codechange: Replace FOR_ALL_INDUSTRIES with range-based for loops --- src/disaster_vehicle.cpp | 12 +++++------- src/industry.h | 3 --- src/industry_cmd.cpp | 13 +++++-------- src/industry_gui.cpp | 3 +-- src/newgrf_industries.cpp | 6 ++---- src/saveload/afterload.cpp | 25 ++++++++----------------- src/saveload/industry_sl.cpp | 8 ++------ src/script/api/script_industrylist.cpp | 11 +++-------- src/station.cpp | 3 +-- src/subsidy.cpp | 3 +-- src/town_cmd.cpp | 3 +-- 11 files changed, 29 insertions(+), 61 deletions(-) diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index faf0a9e92b..a76b9a3cfb 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -745,9 +745,9 @@ static void Disaster_Airplane_Init() { if (!Vehicle::CanAllocateItem(2)) return; - Industry *i, *found = nullptr; + Industry *found = nullptr; - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_AIRPLANE_ATTACKS) && (found == nullptr || Chance16(1, 2))) { found = i; @@ -771,9 +771,9 @@ static void Disaster_Helicopter_Init() { if (!Vehicle::CanAllocateItem(3)) return; - Industry *i, *found = nullptr; + Industry *found = nullptr; - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CHOPPER_ATTACKS) && (found == nullptr || Chance16(1, 2))) { found = i; @@ -858,9 +858,7 @@ static void Disaster_CoalMine_Init() uint m; for (m = 0; m < 15; m++) { - const Industry *i; - - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { if ((GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_CAN_SUBSIDENCE) && --index < 0) { SetDParam(0, i->town->index); AddTileNewsItem(STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE, NT_ACCIDENT, i->location.tile + TileDiffXY(1, 1)); // keep the news, even when the mine closes diff --git a/src/industry.h b/src/industry.h index 392b41bdae..932104ff45 100644 --- a/src/industry.h +++ b/src/industry.h @@ -167,9 +167,6 @@ void ReleaseDisastersTargetingIndustry(IndustryID); bool IsTileForestIndustry(TileIndex tile); -#define FOR_ALL_INDUSTRIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Industry, industry_index, var, start) -#define FOR_ALL_INDUSTRIES(var) FOR_ALL_INDUSTRIES_FROM(var, 0) - /** Data for managing the number of industries of a single industry type. */ struct IndustryTypeBuildData { uint32 probability; ///< Relative probability of building this industry. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index b1c97b7524..3bbd22bd03 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1203,8 +1203,7 @@ void OnTick_Industry() if (_game_mode == GM_EDITOR) return; - Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { ProduceIndustryGoods(i); } } @@ -1391,8 +1390,7 @@ static CommandCost FindTownForIndustry(TileIndex tile, int type, Town **t) if (_settings_game.economy.multiple_industry_per_town) return CommandCost(); - const Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { if (i->type == (byte)type && i->town == *t) { *t = nullptr; return_cmd_error(STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN); @@ -1629,11 +1627,11 @@ static bool CheckIfCanLevelIndustryPlatform(TileIndex tile, DoCommandFlag flags, static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int type) { const IndustrySpec *indspec = GetIndustrySpec(type); - const Industry *i = nullptr; /* On a large map with many industries, it may be faster to check an area. */ static const int dmax = 14; if (Industry::GetNumItems() > (size_t) (dmax * dmax * 2)) { + const Industry* i = nullptr; TileArea tile_area = TileArea(tile, 1, 1).Expand(dmax); TILE_AREA_LOOP(atile, tile_area) { if (GetTileType(atile) == MP_INDUSTRY) { @@ -1651,7 +1649,7 @@ static CommandCost CheckIfFarEnoughFromConflictingIndustry(TileIndex tile, int t return CommandCost(); } - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { /* Within 14 tiles from another industry is considered close */ if (DistanceMax(tile, i->location.tile) > 14) continue; @@ -2833,8 +2831,7 @@ void IndustryMonthlyLoop() _industry_builder.MonthlyLoop(); - Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { UpdateIndustryStatistics(i); if (i->prod_level == PRODLEVEL_CLOSURE) { delete i; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 536f6da586..2461061ccd 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1203,8 +1203,7 @@ protected: if (this->industries.NeedRebuild()) { this->industries.clear(); - const Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { this->industries.push_back(i); } diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index b910bbb3d3..fd32f3e948 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -91,8 +91,7 @@ uint32 GetIndustryIDAtOffset(TileIndex tile, const Industry *i, uint32 cur_grfid static uint32 GetClosestIndustry(TileIndex tile, IndustryType type, const Industry *current) { uint32 best_dist = UINT32_MAX; - const Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { if (i->type != type || i == current) continue; best_dist = min(best_dist, DistanceManhattan(tile, i->location.tile)); @@ -145,8 +144,7 @@ static uint32 GetCountAndDistanceOfClosestInstance(byte param_setID, byte layout } else { /* Count only those who match the same industry type and layout filter * Unfortunately, we have to do it manually */ - const Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { if (i->type == ind_index && i != current && (i->selected_layout == layout_filter || layout_filter == 0) && (!town_filter || i->town == current->town)) { closest_dist = min(closest_dist, DistanceManhattan(current->location.tile, i->location.tile)); count++; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index fb3b1ecf28..ec701f67a7 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -259,8 +259,7 @@ static void InitializeWindowsAndCaches() } /* Identify owners of persistent storage arrays */ - Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { if (i->psa != nullptr) { i->psa->feature = GSF_INDUSTRIES; i->psa->tile = i->location.tile; @@ -1413,7 +1412,6 @@ bool AfterLoadGame() /* Time starts at 0 instead of 1920. * Account for this in older games by adding an offset */ if (IsSavegameVersionBefore(SLV_31)) { - Industry *i; Vehicle *v; _date += DAYS_TILL_ORIGINAL_BASE_YEAR; @@ -1423,7 +1421,7 @@ bool AfterLoadGame() for (Waypoint *wp : Waypoint::Iterate()) wp->build_date += DAYS_TILL_ORIGINAL_BASE_YEAR; for (Engine *e : Engine::Iterate()) e->intro_date += DAYS_TILL_ORIGINAL_BASE_YEAR; for (Company *c : Company::Iterate()) c->inaugurated_year += ORIGINAL_BASE_YEAR; - FOR_ALL_INDUSTRIES(i) i->last_prod_year += ORIGINAL_BASE_YEAR; + for (Industry *i : Industry::Iterate()) i->last_prod_year += ORIGINAL_BASE_YEAR; FOR_ALL_VEHICLES(v) { v->date_of_last_service += DAYS_TILL_ORIGINAL_BASE_YEAR; @@ -1435,8 +1433,6 @@ bool AfterLoadGame() * To give this prettiness to old savegames, we remove all farmfields and * plant new ones. */ if (IsSavegameVersionBefore(SLV_32)) { - Industry *i; - for (TileIndex t = 0; t < map_size; t++) { if (IsTileType(t, MP_CLEAR) && IsClearGround(t, CLEAR_FIELDS)) { /* remove fields */ @@ -1444,7 +1440,7 @@ bool AfterLoadGame() } } - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { uint j; if (GetIndustrySpec(i->type)->behaviour & INDUSTRYBEH_PLANT_ON_BUILT) { @@ -1660,8 +1656,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_70)) { /* Added variables to support newindustries */ - Industry *i; - FOR_ALL_INDUSTRIES(i) i->founder = OWNER_NONE; + for (Industry *i : Industry::Iterate()) i->founder = OWNER_NONE; } /* From version 82, old style canals (above sealevel (0), WATER owner) are no longer supported. @@ -1701,9 +1696,8 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_78)) { - Industry *i; uint j; - FOR_ALL_INDUSTRIES(i) { + for (Industry * i : Industry::Iterate()) { const IndustrySpec *indsp = GetIndustrySpec(i->type); for (j = 0; j < lengthof(i->produced_cargo); j++) { i->produced_cargo[j] = indsp->produced_cargo[j]; @@ -2760,8 +2754,7 @@ bool AfterLoadGame() /* Before savegame version 161, persistent storages were not stored in a pool. */ if (!IsSavegameVersionBefore(SLV_76)) { - Industry *ind; - FOR_ALL_INDUSTRIES(ind) { + for (Industry *ind : Industry::Iterate()) { assert(ind->psa != nullptr); /* Check if the old storage was empty. */ @@ -3044,8 +3037,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_EXTEND_INDUSTRY_CARGO_SLOTS)) { /* Make sure added industry cargo slots are cleared */ - Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { for (size_t ci = 2; ci < lengthof(i->produced_cargo); ci++) { i->produced_cargo[ci] = CT_INVALID; i->produced_cargo_waiting[ci] = 0; @@ -3127,8 +3119,7 @@ bool AfterLoadGame() } } else { /* Link neutral station back to industry, as this is not saved. */ - Industry *ind; - FOR_ALL_INDUSTRIES(ind) if (ind->neutral_station != nullptr) ind->neutral_station->industry = ind; + for (Industry *ind : Industry::Iterate()) if (ind->neutral_station != nullptr) ind->neutral_station->industry = ind; } if (IsSavegameVersionBefore(SLV_TREES_WATER_CLASS)) { diff --git a/src/saveload/industry_sl.cpp b/src/saveload/industry_sl.cpp index 00ffbd4317..f5b1464c1e 100644 --- a/src/saveload/industry_sl.cpp +++ b/src/saveload/industry_sl.cpp @@ -77,10 +77,8 @@ static const SaveLoad _industry_desc[] = { static void Save_INDY() { - Industry *ind; - /* Write the industries */ - FOR_ALL_INDUSTRIES(ind) { + for (Industry *ind : Industry::Iterate()) { SlSetArrayIndex(ind->index); SlObject(ind, _industry_desc); } @@ -129,9 +127,7 @@ static void Load_TIDS() static void Ptrs_INDY() { - Industry *i; - - FOR_ALL_INDUSTRIES(i) { + for (Industry *i : Industry::Iterate()) { SlObject(i, _industry_desc); } } diff --git a/src/script/api/script_industrylist.cpp b/src/script/api/script_industrylist.cpp index 464d6a0bbe..de28f418d4 100644 --- a/src/script/api/script_industrylist.cpp +++ b/src/script/api/script_industrylist.cpp @@ -15,17 +15,14 @@ ScriptIndustryList::ScriptIndustryList() { - Industry *i; - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { this->AddItem(i->index); } } ScriptIndustryList_CargoAccepting::ScriptIndustryList_CargoAccepting(CargoID cargo_id) { - const Industry *i; - - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { for (byte j = 0; j < lengthof(i->accepts_cargo); j++) { if (i->accepts_cargo[j] == cargo_id) this->AddItem(i->index); } @@ -34,9 +31,7 @@ ScriptIndustryList_CargoAccepting::ScriptIndustryList_CargoAccepting(CargoID car ScriptIndustryList_CargoProducing::ScriptIndustryList_CargoProducing(CargoID cargo_id) { - const Industry *i; - - FOR_ALL_INDUSTRIES(i) { + for (const Industry *i : Industry::Iterate()) { for (byte j = 0; j < lengthof(i->produced_cargo); j++) { if (i->produced_cargo[j] == cargo_id) this->AddItem(i->index); } diff --git a/src/station.cpp b/src/station.cpp index 2a343d798a..01311ece3a 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -385,8 +385,7 @@ void Station::RemoveFromAllNearbyLists() { Town *t; FOR_ALL_TOWNS(t) { t->stations_near.erase(this); } - Industry *i; - FOR_ALL_INDUSTRIES(i) { i->stations_near.erase(this); } + for (Industry *i : Industry::Iterate()) { i->stations_near.erase(this); } } /** diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 848a048ddc..db436af257 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -133,8 +133,7 @@ void RebuildSubsidisedSourceAndDestinationCache() Town *t; FOR_ALL_TOWNS(t) t->cache.part_of_subsidy = POS_NONE; - Industry *i; - FOR_ALL_INDUSTRIES(i) i->part_of_subsidy = POS_NONE; + for (Industry *i : Industry::Iterate()) i->part_of_subsidy = POS_NONE; const Subsidy *s; FOR_ALL_SUBSIDIES(s) { diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index cf539b09b3..d97dee3b47 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -112,8 +112,7 @@ Town::~Town() DeleteWindowById(WC_TOWN_VIEW, this->index); /* Check no industry is related to us. */ - const Industry *i; - FOR_ALL_INDUSTRIES(i) assert(i->town != this); + for (const Industry *i : Industry::Iterate()) assert(i->town != this); /* ... and no object is related to us. */ const Object *o; From 09fa39c5b59d88a076a244cf1623a53b0ffa1434 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 16 Dec 2019 19:28:46 +0100 Subject: [PATCH 19/84] Codechange: Replace linkgraph related FOR_ALL with range-based for loops --- src/date.cpp | 3 +-- src/linkgraph/linkgraph.h | 2 -- src/linkgraph/linkgraphjob.h | 2 -- src/linkgraph/linkgraphschedule.cpp | 6 ++---- src/saveload/linkgraph_sl.cpp | 14 +++++--------- 5 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/date.cpp b/src/date.cpp index 74ad76d142..778688720c 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -210,8 +210,7 @@ static void OnNewYear() _date -= days_this_year; FOR_ALL_VEHICLES(v) v->date_of_last_service -= days_this_year; - LinkGraph *lg; - FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(-days_this_year); + for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year); /* Because the _date wraps here, and text-messages expire by game-days, we have to clean out * all of them if the date is set back, else those messages will hang for ever */ diff --git a/src/linkgraph/linkgraph.h b/src/linkgraph/linkgraph.h index 4995efd964..997d946230 100644 --- a/src/linkgraph/linkgraph.h +++ b/src/linkgraph/linkgraph.h @@ -534,6 +534,4 @@ protected: EdgeMatrix edges; ///< Edges in the component. }; -#define FOR_ALL_LINK_GRAPHS(var) FOR_ALL_ITEMS_FROM(LinkGraph, link_graph_index, var, 0) - #endif /* LINKGRAPH_H */ diff --git a/src/linkgraph/linkgraphjob.h b/src/linkgraph/linkgraphjob.h index 955ebefd36..9344ea2462 100644 --- a/src/linkgraph/linkgraphjob.h +++ b/src/linkgraph/linkgraphjob.h @@ -334,8 +334,6 @@ public: inline const LinkGraph &Graph() const { return this->link_graph; } }; -#define FOR_ALL_LINK_GRAPH_JOBS(var) FOR_ALL_ITEMS_FROM(LinkGraphJob, link_graph_job_index, var, 0) - /** * A leg of a path in the link graph. Paths can form trees by being "forked". */ diff --git a/src/linkgraph/linkgraphschedule.cpp b/src/linkgraph/linkgraphschedule.cpp index b1ee71f9a0..964744509e 100644 --- a/src/linkgraph/linkgraphschedule.cpp +++ b/src/linkgraph/linkgraphschedule.cpp @@ -107,10 +107,8 @@ void LinkGraphSchedule::SpawnAll() */ void LinkGraphSchedule::ShiftDates(int interval) { - LinkGraph *lg; - FOR_ALL_LINK_GRAPHS(lg) lg->ShiftDates(interval); - LinkGraphJob *lgj; - FOR_ALL_LINK_GRAPH_JOBS(lgj) lgj->ShiftJoinDate(interval); + for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(interval); + for (LinkGraphJob *lgj : LinkGraphJob::Iterate()) lgj->ShiftJoinDate(interval); } /** diff --git a/src/saveload/linkgraph_sl.cpp b/src/saveload/linkgraph_sl.cpp index 608630b83f..29b685cf7d 100644 --- a/src/saveload/linkgraph_sl.cpp +++ b/src/saveload/linkgraph_sl.cpp @@ -228,17 +228,15 @@ static void Load_LGRS() void AfterLoadLinkGraphs() { if (IsSavegameVersionBefore(SLV_191)) { - LinkGraph *lg; - FOR_ALL_LINK_GRAPHS(lg) { + for (LinkGraph *lg : LinkGraph::Iterate()) { for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) { const Station *st = Station::GetIfValid((*lg)[node_id].Station()); if (st != nullptr) (*lg)[node_id].UpdateLocation(st->xy); } } - LinkGraphJob *lgj; - FOR_ALL_LINK_GRAPH_JOBS(lgj) { - lg = &(const_cast(lgj->Graph())); + for (LinkGraphJob *lgj : LinkGraphJob::Iterate()) { + LinkGraph *lg = &(const_cast(lgj->Graph())); for (NodeID node_id = 0; node_id < lg->Size(); ++node_id) { const Station *st = Station::GetIfValid((*lg)[node_id].Station()); if (st != nullptr) (*lg)[node_id].UpdateLocation(st->xy); @@ -254,8 +252,7 @@ void AfterLoadLinkGraphs() */ static void Save_LGRP() { - LinkGraph *lg; - FOR_ALL_LINK_GRAPHS(lg) { + for (LinkGraph *lg : LinkGraph::Iterate()) { SlSetArrayIndex(lg->index); SlAutolength((AutolengthProc*)DoSave_LGRP, lg); } @@ -266,8 +263,7 @@ static void Save_LGRP() */ static void Save_LGRJ() { - LinkGraphJob *lgj; - FOR_ALL_LINK_GRAPH_JOBS(lgj) { + for (LinkGraphJob *lgj : LinkGraphJob::Iterate()) { SlSetArrayIndex(lgj->index); SlAutolength((AutolengthProc*)DoSave_LGRJ, lgj); } From 41232f18c18c9ca444282a9e959b7dfd6c93eff5 Mon Sep 17 00:00:00 2001 From: glx Date: Mon, 16 Dec 2019 20:56:10 +0100 Subject: [PATCH 20/84] Codechange: Replace network related FOR_ALL with range-based for loops --- src/network/core/tcp_listen.h | 5 +- src/network/network.cpp | 38 ++++-------- src/network/network_admin.cpp | 47 +++++---------- src/network/network_admin.h | 32 ++++------ src/network/network_base.h | 13 ----- src/network/network_chat_gui.cpp | 3 +- src/network/network_client.cpp | 6 +- src/network/network_command.cpp | 10 ++-- src/network/network_gui.cpp | 20 +++---- src/network/network_server.cpp | 87 ++++++++++------------------ src/network/network_server.h | 13 ----- src/script/api/script_clientlist.cpp | 6 +- 12 files changed, 89 insertions(+), 191 deletions(-) diff --git a/src/network/core/tcp_listen.h b/src/network/core/tcp_listen.h index 6c1d3e4ffb..d2982363e6 100644 --- a/src/network/core/tcp_listen.h +++ b/src/network/core/tcp_listen.h @@ -102,8 +102,7 @@ public: FD_ZERO(&write_fd); - Tsocket *cs; - FOR_ALL_ITEMS_FROM(Tsocket, idx, cs, 0) { + for (Tsocket *cs : Tsocket::Iterate()) { FD_SET(cs->sock, &read_fd); FD_SET(cs->sock, &write_fd); } @@ -122,7 +121,7 @@ public: } /* read stuff from clients */ - FOR_ALL_ITEMS_FROM(Tsocket, idx, cs, 0) { + for (Tsocket *cs : Tsocket::Iterate()) { cs->writable = !!FD_ISSET(cs->sock, &write_fd); if (FD_ISSET(cs->sock, &read_fd)) { cs->ReceivePackets(); diff --git a/src/network/network.cpp b/src/network/network.cpp index e7ce387ccf..a27aa224a6 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -99,8 +99,7 @@ extern void StateGameLoop(); */ bool HasClients() { - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) return true; + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) return true; return false; } @@ -121,9 +120,7 @@ NetworkClientInfo::~NetworkClientInfo() */ /* static */ NetworkClientInfo *NetworkClientInfo::GetByClientID(ClientID client_id) { - NetworkClientInfo *ci; - - FOR_ALL_CLIENT_INFOS(ci) { + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_id == client_id) return ci; } @@ -137,9 +134,7 @@ NetworkClientInfo::~NetworkClientInfo() */ /* static */ ServerNetworkGameSocketHandler *ServerNetworkGameSocketHandler::GetByClientID(ClientID client_id) { - NetworkClientSocket *cs; - - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->client_id == client_id) return cs; } @@ -148,10 +143,9 @@ NetworkClientInfo::~NetworkClientInfo() byte NetworkSpectatorCount() { - const NetworkClientInfo *ci; byte count = 0; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas == COMPANY_SPECTATOR) count++; } @@ -408,10 +402,9 @@ static void CheckPauseHelper(bool pause, PauseMode pm) */ static uint NetworkCountActiveClients() { - const NetworkClientSocket *cs; uint count = 0; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (const NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->status != NetworkClientSocket::STATUS_ACTIVE) continue; if (!Company::IsValidID(cs->GetInfo()->client_playas)) continue; count++; @@ -439,8 +432,7 @@ static void CheckMinActiveClients() */ static bool NetworkHasJoiningClient() { - const NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (const NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->status >= NetworkClientSocket::STATUS_AUTHORIZED && cs->status < NetworkClientSocket::STATUS_ACTIVE) return true; } @@ -527,14 +519,12 @@ void NetworkClose(bool close_admins) { if (_network_server) { if (close_admins) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::Iterate()) { as->CloseConnection(true); } } - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { cs->CloseConnection(NETWORK_RECV_STATUS_CONN_LOST); } ServerNetworkGameSocketHandler::CloseListeners(); @@ -768,14 +758,12 @@ bool NetworkServerStart() void NetworkReboot() { if (_network_server) { - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { cs->SendNewGame(); cs->SendPackets(); } - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { as->SendNewGame(); as->SendPackets(); } @@ -794,15 +782,13 @@ void NetworkReboot() void NetworkDisconnect(bool blocking, bool close_admins) { if (_network_server) { - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { cs->SendShutdown(); cs->SendPackets(); } if (close_admins) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { as->SendShutdown(); as->SendPackets(); } diff --git a/src/network/network_admin.cpp b/src/network/network_admin.cpp index 037307627e..f304740a6a 100644 --- a/src/network/network_admin.cpp +++ b/src/network/network_admin.cpp @@ -94,8 +94,7 @@ ServerNetworkAdminSocketHandler::~ServerNetworkAdminSocketHandler() /** Send the packets for the server sockets. */ /* static */ void ServerNetworkAdminSocketHandler::Send() { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::Iterate()) { if (as->status == ADMIN_STATUS_INACTIVE && as->realtime_connect + ADMIN_AUTHORISATION_TIMEOUT < _realtime_tick) { DEBUG(net, 1, "[admin] Admin did not send its authorisation within %d seconds", ADMIN_AUTHORISATION_TIMEOUT / 1000); as->CloseConnection(true); @@ -727,17 +726,16 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_POLL(Packet *p) case ADMIN_UPDATE_CLIENT_INFO: /* The admin is requesting client info. */ - const NetworkClientSocket *cs; if (d1 == UINT32_MAX) { this->SendClientInfo(nullptr, NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER)); - FOR_ALL_CLIENT_SOCKETS(cs) { + for (const NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { this->SendClientInfo(cs, cs->GetInfo()); } } else { if (d1 == CLIENT_ID_SERVER) { this->SendClientInfo(nullptr, NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER)); } else { - cs = NetworkClientSocket::GetByClientID((ClientID)d1); + const NetworkClientSocket *cs = NetworkClientSocket::GetByClientID((ClientID)d1); if (cs != nullptr) this->SendClientInfo(cs, cs->GetInfo()); } } @@ -817,8 +815,7 @@ NetworkRecvStatus ServerNetworkAdminSocketHandler::Receive_ADMIN_CHAT(Packet *p) */ void NetworkAdminClientInfo(const NetworkClientSocket *cs, bool new_client) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CLIENT_INFO] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendClientInfo(cs, cs->GetInfo()); if (new_client) { @@ -834,8 +831,7 @@ void NetworkAdminClientInfo(const NetworkClientSocket *cs, bool new_client) */ void NetworkAdminClientUpdate(const NetworkClientInfo *ci) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CLIENT_INFO] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendClientUpdate(ci); } @@ -848,8 +844,7 @@ void NetworkAdminClientUpdate(const NetworkClientInfo *ci) */ void NetworkAdminClientQuit(ClientID client_id) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CLIENT_INFO] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendClientQuit(client_id); } @@ -863,8 +858,7 @@ void NetworkAdminClientQuit(ClientID client_id) */ void NetworkAdminClientError(ClientID client_id, NetworkErrorCode error_code) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CLIENT_INFO] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendClientError(client_id, error_code); } @@ -883,8 +877,7 @@ void NetworkAdminCompanyInfo(const Company *company, bool new_company) return; } - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_COMPANY_INFO] != ADMIN_FREQUENCY_AUTOMATIC) continue; as->SendCompanyInfo(company); @@ -902,8 +895,7 @@ void NetworkAdminCompanyUpdate(const Company *company) { if (company == nullptr) return; - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_COMPANY_INFO] != ADMIN_FREQUENCY_AUTOMATIC) continue; as->SendCompanyUpdate(company); @@ -917,8 +909,7 @@ void NetworkAdminCompanyUpdate(const Company *company) */ void NetworkAdminCompanyRemove(CompanyID company_id, AdminCompanyRemoveReason bcrr) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { as->SendCompanyRemove(company_id, bcrr); } } @@ -931,8 +922,7 @@ void NetworkAdminChat(NetworkAction action, DestType desttype, ClientID client_i { if (from_admin) return; - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CHAT] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendChat(action, desttype, client_id, msg, data); } @@ -957,8 +947,7 @@ void NetworkServerSendAdminRcon(AdminIndex admin_index, TextColour colour_code, */ void NetworkAdminConsole(const char *origin, const char *string) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CONSOLE] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendConsole(origin, string); } @@ -971,8 +960,7 @@ void NetworkAdminConsole(const char *origin, const char *string) */ void NetworkAdminGameScript(const char *json) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_GAMESCRIPT] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendGameScript(json); } @@ -988,8 +976,7 @@ void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacke { ClientID client_id = owner == nullptr ? _network_own_client_id : owner->client_id; - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { if (as->update_frequency[ADMIN_UPDATE_CMD_LOGGING] & ADMIN_FREQUENCY_AUTOMATIC) { as->SendCmdLogging(client_id, cp); } @@ -1001,8 +988,7 @@ void NetworkAdminCmdLogging(const NetworkClientSocket *owner, const CommandPacke */ void ServerNetworkAdminSocketHandler::WelcomeAll() { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { as->SendWelcome(); } } @@ -1013,8 +999,7 @@ void ServerNetworkAdminSocketHandler::WelcomeAll() */ void NetworkAdminUpdate(AdminUpdateFrequency freq) { - ServerNetworkAdminSocketHandler *as; - FOR_ALL_ACTIVE_ADMIN_SOCKETS(as) { + for (ServerNetworkAdminSocketHandler *as : ServerNetworkAdminSocketHandler::IterateActive()) { for (int i = 0; i < ADMIN_UPDATE_END; i++) { if (as->update_frequency[i] & freq) { /* Update the admin for the required details */ diff --git a/src/network/network_admin.h b/src/network/network_admin.h index bf3dc22428..98dbab4816 100644 --- a/src/network/network_admin.h +++ b/src/network/network_admin.h @@ -82,29 +82,19 @@ public: { return "admin"; } + + /** + * Returns an iterable ensemble of all active admin sockets + * @param from index of the first socket to consider + * @return an iterable ensemble of all active admin sockets + */ + static Pool::IterateWrapper IterateActive(size_t from = 0) + { + return Pool::IterateWrapper(from, + [](size_t index) { return ServerNetworkAdminSocketHandler::Get(index)->GetAdminStatus() == ADMIN_STATUS_ACTIVE; }); + } }; -/** - * Iterate over all the sockets from a given starting point. - * @param var The variable to iterate with. - * @param start The start of the iteration. - */ -#define FOR_ALL_ADMIN_SOCKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(ServerNetworkAdminSocketHandler, adminsocket_index, var, start) - -/** - * Iterate over all the sockets. - * @param var The variable to iterate with. - */ -#define FOR_ALL_ADMIN_SOCKETS(var) FOR_ALL_ADMIN_SOCKETS_FROM(var, 0) - -/** - * Iterate over all the active sockets. - * @param var The variable to iterate with. - */ -#define FOR_ALL_ACTIVE_ADMIN_SOCKETS(var) \ - FOR_ALL_ADMIN_SOCKETS(var) \ - if (var->GetAdminStatus() == ADMIN_STATUS_ACTIVE) - void NetworkAdminClientInfo(const NetworkClientSocket *cs, bool new_client = false); void NetworkAdminClientUpdate(const NetworkClientInfo *ci); void NetworkAdminClientQuit(ClientID client_id); diff --git a/src/network/network_base.h b/src/network/network_base.h index 629f287344..cbb7e88f2c 100644 --- a/src/network/network_base.h +++ b/src/network/network_base.h @@ -37,17 +37,4 @@ struct NetworkClientInfo : NetworkClientInfoPool::PoolItem<&_networkclientinfo_p static NetworkClientInfo *GetByClientID(ClientID client_id); }; -/** - * Iterate over all the clients from a given index. - * @param var The variable to iterate with. - * @param start The location to start the iteration from. - */ -#define FOR_ALL_CLIENT_INFOS_FROM(var, start) FOR_ALL_ITEMS_FROM(NetworkClientInfo, clientinfo_index, var, start) - -/** - * Iterate over all the clients. - * @param var The variable to iterate with. - */ -#define FOR_ALL_CLIENT_INFOS(var) FOR_ALL_CLIENT_INFOS_FROM(var, 0) - #endif /* NETWORK_BASE_H */ diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index 80bf014114..adaf6978c7 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -336,8 +336,7 @@ struct NetworkChatWindow : public Window { /* First, try clients */ if (*item < MAX_CLIENT_SLOTS) { /* Skip inactive clients */ - NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS_FROM(ci, *item) { + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate(*item)) { *item = ci->index; return ci->client_name; } diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 5cbcb4c3b0..08ec7823e1 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1234,8 +1234,7 @@ void NetworkClientsToSpectators(CompanyID cid) /* If our company is changing owner, go to spectators */ if (cid == _local_company) SetLocalCompany(COMPANY_SPECTATOR); - NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas != cid) continue; NetworkTextMessage(NETWORK_ACTION_COMPANY_SPECTATOR, CC_DEFAULT, false, ci->client_name); ci->client_playas = COMPANY_SPECTATOR; @@ -1299,8 +1298,7 @@ bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio) /* Only companies actually playing can speak to team. Eg spectators cannot */ if (!_settings_client.gui.prefer_teamchat || !Company::IsValidID(cio->client_playas)) return false; - const NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas == cio->client_playas && ci != cio) return true; } diff --git a/src/network/network_command.cpp b/src/network/network_command.cpp index 0994c50a8d..5d36a39b96 100644 --- a/src/network/network_command.cpp +++ b/src/network/network_command.cpp @@ -238,8 +238,7 @@ static void DistributeCommandPacket(CommandPacket &cp, const NetworkClientSocket CommandCallback *callback = cp.callback; cp.frame = _frame_counter_max + 1; - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->status >= NetworkClientSocket::STATUS_MAP) { /* Callbacks are only send back to the client who sent them in the * first place. This filters that out. */ @@ -249,8 +248,8 @@ static void DistributeCommandPacket(CommandPacket &cp, const NetworkClientSocket } } - cp.callback = (cs != owner) ? nullptr : callback; - cp.my_cmd = (cs == owner); + cp.callback = (nullptr != owner) ? nullptr : callback; + cp.my_cmd = (nullptr == owner); _local_execution_queue.Append(&cp); } @@ -283,8 +282,7 @@ void NetworkDistributeCommands() DistributeQueue(&_local_wait_queue, nullptr); /* Then send the queues of the others. */ - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { DistributeQueue(&cs->incoming_queue, cs); } } diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index fde95be1a1..2faf5a3950 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1883,10 +1883,9 @@ struct NetworkClientListWindow : Window { bool CheckClientListHeight() { int num = 0; - const NetworkClientInfo *ci; /* Should be replaced with a loop through all clients */ - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas != COMPANY_INACTIVE_CLIENT) num++; } @@ -1910,8 +1909,7 @@ struct NetworkClientListWindow : Window { this->line_height = max(this->icon_size.height + 2U, (uint)FONT_HEIGHT_NORMAL); uint width = 100; // Default width - const NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { width = max(width, GetStringBoundingBox(ci->client_name).width); } @@ -1947,8 +1945,7 @@ struct NetworkClientListWindow : Window { uint name_right = rtl ? right - type_icon_width : right; int i = 0; - const NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { TextColour colour; if (this->selected_item == i++) { // Selected item, highlight it GfxFillRect(r.left + 1, y, r.right - 1, y + this->line_height - 1, PC_BLACK); @@ -1976,15 +1973,14 @@ struct NetworkClientListWindow : Window { { /* Show the popup with option */ if (this->selected_item != -1) { - NetworkClientInfo *ci; - int client_no = this->selected_item; - FOR_ALL_CLIENT_INFOS(ci) { - if (client_no == 0) break; + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { + if (client_no == 0) { + PopupClientList(ci->client_id, pt.x + this->left, pt.y + this->top); + break; + } client_no--; } - - if (ci != nullptr) PopupClientList(ci->client_id, pt.x + this->left, pt.y + this->top); } } diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 7eabf24f57..42a5ab0fcb 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -258,14 +258,13 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta if (status != NETWORK_RECV_STATUS_CONN_LOST && !this->HasClientQuit() && this->status >= STATUS_AUTHORIZED) { /* We did not receive a leave message from this client... */ char client_name[NETWORK_CLIENT_NAME_LENGTH]; - NetworkClientSocket *new_cs; this->GetClientName(client_name, lastof(client_name)); NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST); /* Inform other clients of this... strange leaving ;) */ - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status > STATUS_AUTHORIZED && this != new_cs) { new_cs->SendErrorQuit(this->client_id, NETWORK_ERROR_CONNECTION_LOST); } @@ -310,8 +309,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta /** Send the packets for the server sockets. */ /* static */ void ServerNetworkGameSocketHandler::Send() { - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->writable) { if (cs->SendPackets() != SPS_CLOSED && cs->status == STATUS_MAP) { /* This client is in the middle of a map-send, call the function for that */ @@ -354,7 +352,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() /* Make a list of all clients per company */ char clients[MAX_COMPANIES][NETWORK_CLIENTS_LENGTH]; - NetworkClientSocket *csi; memset(clients, 0, sizeof(clients)); /* Add the local player (if not dedicated) */ @@ -363,7 +360,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendCompanyInfo() strecpy(clients[ci->client_playas], ci->client_name, lastof(clients[ci->client_playas])); } - FOR_ALL_CLIENT_SOCKETS(csi) { + for (NetworkClientSocket *csi : NetworkClientSocket::Iterate()) { char client_name[NETWORK_CLIENT_NAME_LENGTH]; ((ServerNetworkGameSocketHandler*)csi)->GetClientName(client_name, lastof(client_name)); @@ -424,7 +421,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err /* Only send when the current client was in game */ if (this->status > STATUS_AUTHORIZED) { - NetworkClientSocket *new_cs; char client_name[NETWORK_CLIENT_NAME_LENGTH]; this->GetClientName(client_name, lastof(client_name)); @@ -433,7 +429,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, strid); - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status > STATUS_AUTHORIZED && new_cs != this) { /* Some errors we filter to a more general error. Clients don't have to know the real * reason a joining failed. */ @@ -509,7 +505,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNeedCompanyPassword() NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() { Packet *p; - NetworkClientSocket *new_cs; /* Invalid packet when status is AUTH or higher */ if (this->status >= STATUS_AUTHORIZED) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET); @@ -527,7 +522,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() this->SendPacket(p); /* Transmit info about all the active clients */ - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs != this && new_cs->status > STATUS_AUTHORIZED) { this->SendClientInfo(new_cs->GetInfo()); } @@ -540,11 +535,10 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome() NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait() { int waiting = 0; - NetworkClientSocket *new_cs; Packet *p; /* Count how many clients are waiting in the queue, in front of you! */ - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status != STATUS_MAP_WAIT) continue; if (new_cs->GetInfo()->join_date < this->GetInfo()->join_date || (new_cs->GetInfo()->join_date == this->GetInfo()->join_date && new_cs->client_id < this->client_id)) waiting++; } @@ -611,9 +605,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() this->status = STATUS_DONE_MAP; /* Find the best candidate for joining, i.e. the first joiner. */ - NetworkClientSocket *new_cs; NetworkClientSocket *best = nullptr; - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status == STATUS_MAP_WAIT) { if (best == nullptr || best->GetInfo()->join_date > new_cs->GetInfo()->join_date || (best->GetInfo()->join_date == new_cs->GetInfo()->join_date && best->client_id > new_cs->client_id)) { best = new_cs; @@ -628,7 +621,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap() best->SendMap(); /* And update the rest. */ - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status == STATUS_MAP_WAIT) new_cs->SendWait(); } } @@ -1000,7 +993,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_COMPANY_PASSWOR NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet *p) { - NetworkClientSocket *new_cs; /* The client was never joined.. so this is impossible, right? * Ignore the packet, give the client a warning, and close his connection */ if (this->status < STATUS_AUTHORIZED || this->HasClientQuit()) { @@ -1008,7 +1000,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_GETMAP(Packet * } /* Check if someone else is receiving the map */ - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status == STATUS_MAP) { /* Tell the new client to wait */ this->status = STATUS_MAP_WAIT; @@ -1025,7 +1017,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet * /* Client has the map, now start syncing */ if (this->status == STATUS_DONE_MAP && !this->HasClientQuit()) { char client_name[NETWORK_CLIENT_NAME_LENGTH]; - NetworkClientSocket *new_cs; this->GetClientName(client_name, lastof(client_name)); @@ -1043,7 +1034,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_MAP_OK(Packet * this->last_frame = _frame_counter; this->last_frame_server = _frame_counter; - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status > STATUS_AUTHORIZED) { new_cs->SendClientInfo(this->GetInfo()); new_cs->SendJoin(this->client_id); @@ -1135,7 +1126,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p { /* This packets means a client noticed an error and is reporting this * to us. Display the error and report it to the other clients */ - NetworkClientSocket *new_cs; char str[100]; char client_name[NETWORK_CLIENT_NAME_LENGTH]; NetworkErrorCode errorno = (NetworkErrorCode)p->Recv_uint8(); @@ -1154,7 +1144,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ERROR(Packet *p NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, strid); - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status > STATUS_AUTHORIZED) { new_cs->SendErrorQuit(this->client_id, errorno); } @@ -1169,7 +1159,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *p) { /* The client wants to leave. Display this and report it to the other * clients. */ - NetworkClientSocket *new_cs; char client_name[NETWORK_CLIENT_NAME_LENGTH]; /* The client was never joined.. thank the client for the packet, but ignore it */ @@ -1181,7 +1170,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_QUIT(Packet *p) NetworkTextMessage(NETWORK_ACTION_LEAVE, CC_DEFAULT, false, client_name, nullptr, STR_NETWORK_MESSAGE_CLIENT_LEAVING); - FOR_ALL_CLIENT_SOCKETS(new_cs) { + for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) { if (new_cs->status > STATUS_AUTHORIZED && new_cs != this) { new_cs->SendQuit(this->client_id); } @@ -1250,7 +1239,6 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::Receive_CLIENT_ACK(Packet *p) */ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, const char *msg, ClientID from_id, int64 data, bool from_admin) { - NetworkClientSocket *cs; const NetworkClientInfo *ci, *ci_own, *ci_to; switch (desttype) { @@ -1268,7 +1256,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co } } else { /* Else find the client to send the message to */ - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->client_id == (ClientID)dest) { cs->SendChat(action, from_id, false, msg, data); break; @@ -1285,7 +1273,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co NetworkTextMessage(action, GetDrawStringCompanyColour(ci->client_playas), true, ci_to->client_name, msg, data); } } else { - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->client_id == from_id) { cs->SendChat(action, (ClientID)dest, true, msg, data); break; @@ -1299,7 +1287,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co bool show_local = true; /* Find all clients that belong to this company */ ci_to = nullptr; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { ci = cs->GetInfo(); if (ci != nullptr && ci->client_playas == (CompanyID)dest) { cs->SendChat(action, from_id, false, msg, data); @@ -1333,7 +1321,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co GetString(name, str, lastof(name)); NetworkTextMessage(action, GetDrawStringCompanyColour(ci_own->client_playas), true, name, msg, data); } else { - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->client_id == from_id) { cs->SendChat(action, ci_to->client_id, true, msg, data); } @@ -1347,7 +1335,7 @@ void NetworkServerSendChat(NetworkAction action, DestType desttype, int dest, co FALLTHROUGH; case DESTTYPE_BROADCAST: - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { cs->SendChat(action, from_id, false, msg, data); } @@ -1584,14 +1572,13 @@ void NetworkPopulateCompanyStats(NetworkCompanyStats *stats) */ void NetworkUpdateClientInfo(ClientID client_id) { - NetworkClientSocket *cs; NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); if (ci == nullptr) return; DEBUG(desync, 1, "client: %08x; %02x; %02x; %04x", _date, _date_fract, (int)ci->client_playas, client_id); - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { cs->SendClientInfo(ci); } @@ -1616,7 +1603,6 @@ static void NetworkCheckRestartMap() */ static void NetworkAutoCleanCompanies() { - const NetworkClientInfo *ci; bool clients_in_company[MAX_COMPANIES]; int vehicles_in_company[MAX_COMPANIES]; @@ -1625,12 +1611,12 @@ static void NetworkAutoCleanCompanies() memset(clients_in_company, 0, sizeof(clients_in_company)); /* Detect the active companies */ - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (Company::IsValidID(ci->client_playas)) clients_in_company[ci->client_playas] = true; } if (!_network_dedicated) { - ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); + const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); if (Company::IsValidID(ci->client_playas)) clients_in_company[ci->client_playas] = true; } @@ -1695,10 +1681,8 @@ bool NetworkFindName(char *new_name, const char *last) strecpy(original_name, new_name, lastof(original_name)); while (!found_name) { - const NetworkClientInfo *ci; - found_name = true; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (strcmp(ci->client_name, new_name) == 0) { /* Name already in use */ found_name = false; @@ -1706,7 +1690,7 @@ bool NetworkFindName(char *new_name, const char *last) } } /* Check if it is the same as the server-name */ - ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); + const NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(CLIENT_ID_SERVER); if (ci != nullptr) { if (strcmp(ci->client_name, new_name) == 0) found_name = false; // name already in use } @@ -1731,13 +1715,12 @@ bool NetworkFindName(char *new_name, const char *last) */ bool NetworkServerChangeClientName(ClientID client_id, const char *new_name) { - NetworkClientInfo *ci; /* Check if the name's already in use */ - FOR_ALL_CLIENT_INFOS(ci) { + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (strcmp(ci->client_name, new_name) == 0) return false; } - ci = NetworkClientInfo::GetByClientID(client_id); + NetworkClientInfo *ci = NetworkClientInfo::GetByClientID(client_id); if (ci == nullptr) return false; NetworkTextMessage(NETWORK_ACTION_NAME_CHANGE, CC_DEFAULT, true, ci->client_name, new_name); @@ -1785,7 +1768,6 @@ static void NetworkHandleCommandQueue(NetworkClientSocket *cs) */ void NetworkServer_Tick(bool send_frame) { - NetworkClientSocket *cs; #ifndef ENABLE_NETWORK_SYNC_EVERY_FRAME bool send_sync = false; #endif @@ -1799,7 +1781,7 @@ void NetworkServer_Tick(bool send_frame) /* Now we are done with the frame, inform the clients that they can * do their frame! */ - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { /* We allow a number of bytes per frame, but only to the burst amount * to be available for packet receiving at any particular time. */ cs->receive_limit = min(cs->receive_limit + _settings_client.network.bytes_per_frame, @@ -1956,8 +1938,7 @@ void NetworkServerShowStatusToConsole() }; assert_compile(lengthof(stat_str) == NetworkClientSocket::STATUS_END); - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { NetworkClientInfo *ci = cs->GetInfo(); if (ci == nullptr) continue; uint lag = NetworkCalculateLag(cs); @@ -1976,9 +1957,7 @@ void NetworkServerShowStatusToConsole() */ void NetworkServerSendConfigUpdate() { - NetworkClientSocket *cs; - - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->status >= NetworkClientSocket::STATUS_PRE_ACTIVE) cs->SendConfigUpdate(); } } @@ -1995,8 +1974,7 @@ void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded) SB(_network_company_passworded, company_id, 1, !!passworded); SetWindowClassesDirty(WC_COMPANY); - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->status >= NetworkClientSocket::STATUS_PRE_ACTIVE) cs->SendCompanyUpdate(); } @@ -2090,8 +2068,7 @@ uint NetworkServerKickOrBanIP(const char *ip, bool ban) uint n = 0; /* There can be multiple clients with the same IP, kick them all */ - NetworkClientSocket *cs; - FOR_ALL_CLIENT_SOCKETS(cs) { + for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) { if (cs->client_id == CLIENT_ID_SERVER) continue; if (cs->client_address.IsInNetmask(ip)) { NetworkServerKickClient(cs->client_id); @@ -2109,8 +2086,7 @@ uint NetworkServerKickOrBanIP(const char *ip, bool ban) */ bool NetworkCompanyHasClients(CompanyID company) { - const NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas == company) return true; } return false; @@ -2138,8 +2114,7 @@ void ServerNetworkGameSocketHandler::GetClientName(char *client_name, const char */ void NetworkPrintClients() { - NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (_network_server) { IConsolePrintF(CC_INFO, "Client #%1d name: '%s' company: %1d IP: %s", ci->client_id, diff --git a/src/network/network_server.h b/src/network/network_server.h index d44598cc32..9a1873520c 100644 --- a/src/network/network_server.h +++ b/src/network/network_server.h @@ -120,17 +120,4 @@ void NetworkServer_Tick(bool send_frame); void NetworkServerSetCompanyPassword(CompanyID company_id, const char *password, bool already_hashed = true); void NetworkServerUpdateCompanyPassworded(CompanyID company_id, bool passworded); -/** - * Iterate over all the sockets from a given starting point. - * @param var The variable to iterate with. - * @param start The start of the iteration. - */ -#define FOR_ALL_CLIENT_SOCKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(NetworkClientSocket, clientsocket_index, var, start) - -/** - * Iterate over all the sockets. - * @param var The variable to iterate with. - */ -#define FOR_ALL_CLIENT_SOCKETS(var) FOR_ALL_CLIENT_SOCKETS_FROM(var, 0) - #endif /* NETWORK_SERVER_H */ diff --git a/src/script/api/script_clientlist.cpp b/src/script/api/script_clientlist.cpp index 38d9bae498..eb57d8e44a 100644 --- a/src/script/api/script_clientlist.cpp +++ b/src/script/api/script_clientlist.cpp @@ -18,8 +18,7 @@ ScriptClientList::ScriptClientList() { if (!_networking) return; - NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { this->AddItem(ci->client_id); } } @@ -36,8 +35,7 @@ ScriptClientList_Company::ScriptClientList_Company(ScriptCompany::CompanyID comp c = (CompanyID)company; } - NetworkClientInfo *ci; - FOR_ALL_CLIENT_INFOS(ci) { + for (const NetworkClientInfo *ci : NetworkClientInfo::Iterate()) { if (ci->client_playas == c) this->AddItem(ci->client_id); } } From 9892d90b26db4dfe97ec7baeb89e43acb53a178e Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 01:35:29 +0100 Subject: [PATCH 21/84] Codechange: Replace order related FOR_ALL with range-based for loops --- src/order_backup.cpp | 28 ++++++++++------------------ src/order_backup.h | 13 ------------- src/order_base.h | 8 -------- src/saveload/afterload.cpp | 16 ++++++---------- src/saveload/order_sl.cpp | 26 ++++++++------------------ src/saveload/station_sl.cpp | 3 +-- src/saveload/waypoint_sl.cpp | 3 +-- src/station_cmd.cpp | 3 +-- 8 files changed, 27 insertions(+), 73 deletions(-) diff --git a/src/order_backup.cpp b/src/order_backup.cpp index c472363325..d537d8ce5c 100644 --- a/src/order_backup.cpp +++ b/src/order_backup.cpp @@ -102,8 +102,7 @@ void OrderBackup::DoRestore(Vehicle *v) { /* Don't use reset as that broadcasts over the network to reset the variable, * which is what we are doing at the moment. */ - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { if (ob->user == user) delete ob; } if (OrderBackup::CanAllocateItem()) { @@ -119,8 +118,7 @@ void OrderBackup::DoRestore(Vehicle *v) */ /* static */ void OrderBackup::Restore(Vehicle *v, uint32 user) { - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { if (v->tile != ob->tile || ob->user != user) continue; ob->DoRestore(v); @@ -136,8 +134,7 @@ void OrderBackup::DoRestore(Vehicle *v) */ /* static */ void OrderBackup::ResetOfUser(TileIndex tile, uint32 user) { - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { if (ob->user == user && (ob->tile == tile || tile == INVALID_TILE)) delete ob; } } @@ -169,9 +166,8 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, { assert(_network_server); - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { - /* If it's not an backup of us, so ignore it. */ + for (OrderBackup *ob : OrderBackup::Iterate()) { + /* If it's not a backup of us, ignore it. */ if (ob->user != user) continue; DoCommandP(0, 0, user, CMD_CLEAR_ORDER_BACKUP); @@ -193,9 +189,8 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, * default is just plain and simple: 0. */ uint32 user = _networking && !_network_server ? _network_own_client_id : CLIENT_ID_SERVER; - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { - /* If it's not an backup of us, so ignore it. */ + for (OrderBackup *ob : OrderBackup::Iterate()) { + /* If it's not a backup of us, ignore it. */ if (ob->user != user) continue; /* If it's not for our chosen tile either, ignore it. */ if (t != INVALID_TILE && t != ob->tile) continue; @@ -219,8 +214,7 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, */ /* static */ void OrderBackup::ClearGroup(GroupID group) { - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { if (ob->group == group) ob->group = DEFAULT_GROUP; } } @@ -235,8 +229,7 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, /* static */ void OrderBackup::ClearVehicle(const Vehicle *v) { assert(v != nullptr); - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { if (ob->clone == v) { /* Get another item in the shared list. */ ob->clone = (v->FirstShared() == v) ? v->NextShared() : v->FirstShared(); @@ -256,8 +249,7 @@ CommandCost CmdClearOrderBackup(TileIndex tile, DoCommandFlag flags, uint32 p1, */ /* static */ void OrderBackup::RemoveOrder(OrderType type, DestinationID destination, bool hangar) { - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { for (Order *order = ob->orders; order != nullptr; order = order->next) { OrderType ot = order->GetType(); if (ot == OT_GOTO_DEPOT && (order->GetDepotActionType() & ODATFB_NEAREST_DEPOT) != 0) continue; diff --git a/src/order_backup.h b/src/order_backup.h index 6df9842774..5d1dcef50e 100644 --- a/src/order_backup.h +++ b/src/order_backup.h @@ -64,17 +64,4 @@ public: static void RemoveOrder(OrderType type, DestinationID destination, bool hangar); }; -/** - * Iterator over all order backups from a given ID. - * @param var The variable to iterate with. - * @param start The start of the iteration. - */ -#define FOR_ALL_ORDER_BACKUPS_FROM(var, start) FOR_ALL_ITEMS_FROM(OrderBackup, order_backup_index, var, start) - -/** - * Iterator over all order backups. - * @param var The variable to iterate with. - */ -#define FOR_ALL_ORDER_BACKUPS(var) FOR_ALL_ORDER_BACKUPS_FROM(var, 0) - #endif /* ORDER_BACKUP_H */ diff --git a/src/order_base.h b/src/order_base.h index 34459cb5df..347adbcee0 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -390,14 +390,6 @@ public: void DebugCheckSanity() const; }; -#define FOR_ALL_ORDERS_FROM(var, start) FOR_ALL_ITEMS_FROM(Order, order_index, var, start) -#define FOR_ALL_ORDERS(var) FOR_ALL_ORDERS_FROM(var, 0) - - #define FOR_VEHICLE_ORDERS(v, order) for (order = (v->orders.list == nullptr) ? nullptr : v->orders.list->GetFirstOrder(); order != nullptr; order = order->next) - -#define FOR_ALL_ORDER_LISTS_FROM(var, start) FOR_ALL_ITEMS_FROM(OrderList, orderlist_index, var, start) -#define FOR_ALL_ORDER_LISTS(var) FOR_ALL_ORDER_LISTS_FROM(var, 0) - #endif /* ORDER_BASE_H */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index ec701f67a7..39ee5b845e 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1451,10 +1451,9 @@ bool AfterLoadGame() /* Setting no refit flags to all orders in savegames from before refit in orders were added */ if (IsSavegameVersionBefore(SLV_36)) { - Order *order; Vehicle *v; - FOR_ALL_ORDERS(order) { + for (Order *order : Order::Iterate()) { order->SetRefit(CT_NO_REFIT); } @@ -1724,8 +1723,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_93)) { /* Rework of orders. */ - Order *order; - FOR_ALL_ORDERS(order) order->ConvertFromOldSavegame(); + for (Order *order : Order::Iterate()) order->ConvertFromOldSavegame(); Vehicle *v; FOR_ALL_VEHICLES(v) { @@ -1736,13 +1734,13 @@ bool AfterLoadGame() v->current_order.ConvertFromOldSavegame(); if (v->type == VEH_ROAD && v->IsPrimaryVehicle() && v->FirstShared() == v) { + Order* order; FOR_VEHICLE_ORDERS(v, order) order->SetNonStopType(ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS); } } } else if (IsSavegameVersionBefore(SLV_94)) { /* Unload and transfer are now mutual exclusive. */ - Order *order; - FOR_ALL_ORDERS(order) { + for (Order *order : Order::Iterate()) { if ((order->GetUnloadType() & (OUFB_UNLOAD | OUFB_TRANSFER)) == (OUFB_UNLOAD | OUFB_TRANSFER)) { order->SetUnloadType(OUFB_TRANSFER); order->SetLoadType(OLFB_NO_LOAD); @@ -2160,8 +2158,7 @@ bool AfterLoadGame() /* Trains could now stop in a specific location. */ if (IsSavegameVersionBefore(SLV_117)) { - Order *o; - FOR_ALL_ORDERS(o) { + for (Order *o : Order::Iterate()) { if (o->IsType(OT_GOTO_STATION)) o->SetStopLocation(OSL_PLATFORM_FAR_END); } } @@ -3014,8 +3011,7 @@ bool AfterLoadGame() #ifndef DEBUG_DUMP_COMMANDS /* Note: We cannot use CleanPool since that skips part of the destructor * and then leaks un-reachable Orders in the order pool. */ - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { delete ob; } #endif diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 80b0aa8719..0a9fa2a8cc 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -123,9 +123,7 @@ const SaveLoad *GetOrderDescription() static void Save_ORDR() { - Order *order; - - FOR_ALL_ORDERS(order) { + for (Order *order : Order::Iterate()) { SlSetArrayIndex(order->index); SlObject(order, GetOrderDescription()); } @@ -166,8 +164,8 @@ static void Load_ORDR() } /* Update all the next pointer */ - Order *o; - FOR_ALL_ORDERS(o) { + for (Order *o : Order::Iterate()) { + size_t order_index = o->index; /* Delete invalid orders */ if (o->IsType(OT_NOTHING)) { delete o; @@ -197,9 +195,7 @@ static void Ptrs_ORDR() /* Orders from old savegames have pointers corrected in Load_ORDR */ if (IsSavegameVersionBefore(SLV_5, 2)) return; - Order *o; - - FOR_ALL_ORDERS(o) { + for (Order *o : Order::Iterate()) { SlObject(o, GetOrderDescription()); } } @@ -216,9 +212,7 @@ const SaveLoad *GetOrderListDescription() static void Save_ORDL() { - OrderList *list; - - FOR_ALL_ORDER_LISTS(list) { + for (OrderList *list : OrderList::Iterate()) { SlSetArrayIndex(list->index); SlObject(list, GetOrderListDescription()); } @@ -238,9 +232,7 @@ static void Load_ORDL() static void Ptrs_ORDL() { - OrderList *list; - - FOR_ALL_ORDER_LISTS(list) { + for (OrderList *list : OrderList::Iterate()) { SlObject(list, GetOrderListDescription()); } } @@ -277,8 +269,7 @@ static void Save_BKOR() * normal games this information isn't needed. */ if (!_networking || !_network_server) return; - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { SlSetArrayIndex(ob->index); SlObject(ob, GetOrderBackupDescription()); } @@ -297,8 +288,7 @@ void Load_BKOR() static void Ptrs_BKOR() { - OrderBackup *ob; - FOR_ALL_ORDER_BACKUPS(ob) { + for (OrderBackup *ob : OrderBackup::Iterate()) { SlObject(ob, GetOrderBackupDescription()); } } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 7b091e2f1c..08fc07157a 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -40,8 +40,7 @@ static void UpdateWaypointOrder(Order *o) void MoveBuoysToWaypoints() { /* Buoy orders become waypoint orders */ - OrderList *ol; - FOR_ALL_ORDER_LISTS(ol) { + for (OrderList *ol : OrderList::Iterate()) { VehicleType vt = ol->GetFirstSharedVehicle()->type; if (vt != VEH_SHIP && vt != VEH_TRAIN) continue; diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index 37b221e327..ddb11082ef 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -130,8 +130,7 @@ void MoveWaypointsToBaseStations() } /* Update the orders of vehicles */ - OrderList *ol; - FOR_ALL_ORDER_LISTS(ol) { + for (OrderList *ol : OrderList::Iterate()) { if (ol->GetFirstSharedVehicle()->type != VEH_TRAIN) continue; for (Order *o = ol->GetFirstOrder(); o != nullptr; o = o->next) UpdateWaypointOrder(o); diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 126e6fd9d7..4b2acb2db2 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -3664,9 +3664,8 @@ void DeleteStaleLinks(Station *from) if (auto_distributed) { /* Have all vehicles refresh their next hops before deciding to * remove the node. */ - OrderList *l; std::vector vehicles; - FOR_ALL_ORDER_LISTS(l) { + for (OrderList *l : OrderList::Iterate()) { bool found_from = false; bool found_to = false; for (Order *order = l->GetFirstOrder(); order != nullptr; order = order->next) { From d8a1be48cd60c690235de175e9a044b95f92ea28 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 03:37:43 +0100 Subject: [PATCH 22/84] Codechange: Replace vehicle related FOR_ALL with range-based for loops --- src/aircraft.h | 5 -- src/aircraft_cmd.cpp | 3 +- src/company_cmd.cpp | 3 +- src/date.cpp | 4 +- src/disaster_vehicle.cpp | 24 +++---- src/disaster_vehicle.h | 6 -- src/economy.cpp | 12 ++-- src/effectvehicle_base.h | 6 -- src/elrail.cpp | 5 +- src/engine.cpp | 9 +-- src/group_cmd.cpp | 17 ++--- src/industry_cmd.cpp | 3 +- src/network/network_server.cpp | 7 +- src/openttd.cpp | 5 +- src/order_cmd.cpp | 4 +- src/road.cpp | 3 +- src/road_cmd.cpp | 6 +- src/roadveh.h | 2 - src/saveload/afterload.cpp | 98 +++++++++------------------ src/saveload/cargopacket_sl.cpp | 9 +-- src/saveload/oldloader_sl.cpp | 7 +- src/saveload/station_sl.cpp | 3 +- src/saveload/vehicle_sl.cpp | 57 ++++++---------- src/saveload/waypoint_sl.cpp | 3 +- src/script/api/script_group.cpp | 6 +- src/script/api/script_vehiclelist.cpp | 15 ++-- src/settings.cpp | 27 +++----- src/ship.h | 6 -- src/smallmap_gui.cpp | 3 +- src/station.cpp | 6 +- src/station_cmd.cpp | 12 ++-- src/toolbar_gui.cpp | 3 +- src/train.h | 2 - src/train_cmd.cpp | 12 ++-- src/train_gui.cpp | 3 +- src/vehicle.cpp | 27 +++----- src/vehicle_base.h | 27 ++------ src/vehicle_cmd.cpp | 4 +- src/vehiclelist.cpp | 18 +++-- 39 files changed, 155 insertions(+), 317 deletions(-) diff --git a/src/aircraft.h b/src/aircraft.h index 4acf0da3da..d201743a6f 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -136,11 +136,6 @@ struct Aircraft FINAL : public SpecializedVehicle { } }; -/** - * Macro for iterating over all aircraft. - */ -#define FOR_ALL_AIRCRAFT(var) FOR_ALL_VEHICLES_OF_TYPE(Aircraft, var) - void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result); Station *GetTargetAirportIfValid(const Aircraft *v); diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 2628343444..e13658d6fe 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -2113,8 +2113,7 @@ void UpdateAirplanesOnNewStation(const Station *st) const AirportFTAClass *ap = st->airport.GetFTA(); Direction rotation = st->airport.tile == INVALID_TILE ? DIR_N : st->airport.rotation; - Aircraft *v; - FOR_ALL_AIRCRAFT(v) { + for (Aircraft *v : Aircraft::Iterate()) { if (!v->IsNormalAircraft() || v->targetairport != st->index) continue; assert(v->state == FLYING); diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 4fa8eced26..6308c14472 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -1025,8 +1025,7 @@ CommandCost CmdSetCompanyColour(TileIndex tile, DoCommandFlag flags, uint32 p1, InvalidateWindowData(WC_SMALLMAP, 0, 1); /* Company colour data is indirectly cached. */ - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->owner == _current_company) v->InvalidateNewGRFCache(); } diff --git a/src/date.cpp b/src/date.cpp index 778688720c..c45396efea 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -202,14 +202,12 @@ static void OnNewYear() ShowEndGameChart(); /* check if we reached the maximum year, decrement dates by a year */ } else if (_cur_year == MAX_YEAR + 1) { - Vehicle *v; int days_this_year; _cur_year--; days_this_year = IsLeapYear(_cur_year) ? DAYS_IN_LEAP_YEAR : DAYS_IN_YEAR; _date -= days_this_year; - FOR_ALL_VEHICLES(v) v->date_of_last_service -= days_this_year; - + for (Vehicle *v : Vehicle::Iterate()) v->date_of_last_service -= days_this_year; for (LinkGraph *lg : LinkGraph::Iterate()) lg->ShiftDates(-days_this_year); /* Because the _date wraps here, and text-messages expire by game-days, we have to clean out diff --git a/src/disaster_vehicle.cpp b/src/disaster_vehicle.cpp index a76b9a3cfb..1244f99aba 100644 --- a/src/disaster_vehicle.cpp +++ b/src/disaster_vehicle.cpp @@ -331,8 +331,7 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) v->current_order.SetDestination(1); uint n = 0; // Total number of targetable road vehicles. - RoadVehicle *u; - FOR_ALL_ROADVEHICLES(u) { + for (const RoadVehicle *u : RoadVehicle::Iterate()) { if (u->IsFrontEngine()) n++; } @@ -343,14 +342,16 @@ static bool DisasterTick_Ufo(DisasterVehicle *v) } n = RandomRange(n); // Choose one of them. - FOR_ALL_ROADVEHICLES(u) { + for (const RoadVehicle *u : RoadVehicle::Iterate()) { /* Find (n+1)-th road vehicle. */ - if (u->IsFrontEngine() && (n-- == 0)) break; + if (u->IsFrontEngine() && (n-- == 0)) { + /* Target it. */ + v->dest_tile = u->index; + v->age = 0; + break; + } } - /* Target it. */ - v->dest_tile = u->index; - v->age = 0; return true; } else { /* Target a vehicle */ @@ -540,8 +541,7 @@ static bool DisasterTick_Big_Ufo(DisasterVehicle *v) v->current_order.SetDestination(2); - Vehicle *target; - FOR_ALL_VEHICLES(target) { + for (Vehicle *target : Vehicle::Iterate()) { if (target->IsGroundVehicle()) { if (Delta(target->x_pos, v->x_pos) + Delta(target->y_pos, v->y_pos) <= 12 * (int)TILE_SIZE) { target->breakdown_ctr = 5; @@ -937,8 +937,7 @@ void StartupDisasters() */ void ReleaseDisastersTargetingIndustry(IndustryID i) { - DisasterVehicle *v; - FOR_ALL_DISASTERVEHICLES(v) { + for (DisasterVehicle *v : DisasterVehicle::Iterate()) { /* primary disaster vehicles that have chosen target */ if (v->subtype == ST_AIRPLANE || v->subtype == ST_HELICOPTER) { /* if it has chosen target, and it is this industry (yes, dest_tile is IndustryID here), set order to "leaving map peacefully" */ @@ -953,8 +952,7 @@ void ReleaseDisastersTargetingIndustry(IndustryID i) */ void ReleaseDisastersTargetingVehicle(VehicleID vehicle) { - DisasterVehicle *v; - FOR_ALL_DISASTERVEHICLES(v) { + for (DisasterVehicle *v : DisasterVehicle::Iterate()) { /* primary disaster vehicles that have chosen target */ if (v->subtype == ST_SMALL_UFO) { if (v->current_order.GetDestination() != 0 && v->dest_tile == vehicle) { diff --git a/src/disaster_vehicle.h b/src/disaster_vehicle.h index 11d579ed70..dff97a69e9 100644 --- a/src/disaster_vehicle.h +++ b/src/disaster_vehicle.h @@ -51,10 +51,4 @@ struct DisasterVehicle FINAL : public SpecializedVehicleowner != owner) continue; if (v->type == VEH_TRAIN || @@ -156,12 +155,11 @@ int UpdateCompanyRatingAndValue(Company *c, bool update) /* Count vehicles */ { - Vehicle *v; Money min_profit = 0; bool min_profit_first = true; uint num = 0; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->owner != owner) continue; if (IsCompanyBuildableVehicleType(v->type) && v->IsPrimaryVehicle()) { if (v->profit_last_year > 0) num++; // For the vehicle score only count profitable vehicles @@ -390,8 +388,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) } { - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) { if (new_owner == INVALID_OWNER) { if (v->Previous() == nullptr) delete v; @@ -435,8 +432,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) old_company->settings.vehicle.servint_ispercent = new_company->settings.vehicle.servint_ispercent; } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) { assert(new_owner != INVALID_OWNER); diff --git a/src/effectvehicle_base.h b/src/effectvehicle_base.h index 5356d8b4f5..73a49046bf 100644 --- a/src/effectvehicle_base.h +++ b/src/effectvehicle_base.h @@ -35,10 +35,4 @@ struct EffectVehicle FINAL : public SpecializedVehiclerailtype == RAILTYPE_ELECTRIC) { /* this railroad vehicle is now compatible only with elrail, * so add there also normal rail compatibility */ @@ -623,7 +622,7 @@ bool SettingsDisableElrail(int32 p1) } /* Fix the total power and acceleration for trains */ - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { /* power and acceleration is cached only for front engines */ if (t->IsFrontEngine()) { t->ConsistChanged(CCF_TRACK); diff --git a/src/engine.cpp b/src/engine.cpp index d0333b8f44..66e68fd3c6 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -526,8 +526,7 @@ EngineID EngineOverrideManager::GetID(VehicleType type, uint16 grf_local_id, uin */ bool EngineOverrideManager::ResetToCurrentNewGRFConfig() { - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (IsCompanyBuildableVehicleType(v)) return false; } @@ -765,8 +764,7 @@ static CompanyID GetPreviewCompany(Engine *e) c->old_economy[0].performance_history > best_hist) { /* Check whether the company uses similar vehicles */ - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->owner != c->index || v->type != e->type) continue; if (!v->GetEngine()->CanCarryCargo() || !HasBit(cargomask, v->cargo_type)) continue; @@ -900,7 +898,6 @@ CommandCost CmdWantEnginePreview(TileIndex tile, DoCommandFlag flags, uint32 p1, */ static void NewVehicleAvailable(Engine *e) { - Vehicle *v; EngineID index = e->index; /* In case the company didn't build the vehicle during the intro period, @@ -914,7 +911,7 @@ static void NewVehicleAvailable(Engine *e) /* We assume the user did NOT build it.. prove me wrong ;) */ c->block_preview = 20; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == VEH_TRAIN || v->type == VEH_ROAD || v->type == VEH_SHIP || (v->type == VEH_AIRCRAFT && Aircraft::From(v)->IsNormalAircraft())) { if (v->owner == c->index && v->engine_type == index) { diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index a13cd5f384..497d74d68b 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -113,8 +113,7 @@ void GroupStatistics::Clear() g->statistics.Clear(); } - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (!v->IsEngineCountable()) continue; GroupStatistics::CountEngine(v, 1); @@ -193,8 +192,7 @@ void GroupStatistics::Clear() g->statistics.ClearProfits(); } - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->IsPrimaryVehicle() && v->age > VEHICLE_PROFIT_MIN_AGE) GroupStatistics::VehicleReachedProfitAge(v); } } @@ -267,8 +265,7 @@ const Livery *GetParentLivery(const Group *g) void PropagateChildLivery(const Group *g) { /* Company colour data is indirectly cached. */ - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->group_id == g->index && (!v->IsGroundVehicle() || v->IsFrontEngine())) { for (Vehicle *u = v; u != nullptr; u = u->Next()) { u->colourmap = PAL_NONE; @@ -573,11 +570,9 @@ CommandCost CmdAddSharedVehicleGroup(TileIndex tile, DoCommandFlag flags, uint32 if (!Group::IsValidID(id_g) || !IsCompanyBuildableVehicleType(type)) return CMD_ERROR; if (flags & DC_EXEC) { - Vehicle *v; - /* Find the first front engine which belong to the group id_g * then add all shared vehicles of this front engine to the group id_g */ - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == type && v->IsPrimaryVehicle()) { if (v->group_id != id_g) continue; @@ -613,10 +608,8 @@ CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, DoCommandFlag flags, uint3 if (g == nullptr || g->owner != _current_company) return CMD_ERROR; if (flags & DC_EXEC) { - Vehicle *v; - /* Find each Vehicle that belongs to the group old_g and add it to the default group */ - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->IsPrimaryVehicle()) { if (v->group_id != old_g) continue; diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 3bbd22bd03..c6602b0877 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2502,9 +2502,8 @@ static int WhoCanServiceIndustry(Industry *ind) { if (ind->stations_near.size() == 0) return 0; // No stations found at all => nobody services - const Vehicle *v; int result = 0; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { /* Is it worthwhile to try this vehicle? */ if (v->owner != _local_company && result != 0) continue; diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index 42a5ab0fcb..f9c9e91f23 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1534,12 +1534,10 @@ void NetworkSocketHandler::SendCompanyInformation(Packet *p, const Company *c, c */ void NetworkPopulateCompanyStats(NetworkCompanyStats *stats) { - const Vehicle *v; - memset(stats, 0, sizeof(*stats) * MAX_COMPANIES); /* Go through all vehicles and count the type of vehicles */ - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (!Company::IsValidID(v->owner) || !v->IsPrimaryVehicle()) continue; byte type = 0; switch (v->type) { @@ -1623,8 +1621,7 @@ static void NetworkAutoCleanCompanies() if (_settings_client.network.autoclean_novehicles != 0) { memset(vehicles_in_company, 0, sizeof(vehicles_in_company)); - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (!Company::IsValidID(v->owner) || !v->IsPrimaryVehicle()) continue; vehicles_in_company[v->owner]++; } diff --git a/src/openttd.cpp b/src/openttd.cpp index cf79419cc6..63d5bf7564 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1230,8 +1230,7 @@ static void CheckCaches() rs->GetEntry(DIAGDIR_NW)->CheckIntegrity(rs); } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { extern void FillNewGRFVehicleCache(const Vehicle *v); if (v != v->First() || v->vehstatus & VS_CRASHED || !v->IsPrimaryVehicle()) continue; @@ -1306,7 +1305,7 @@ static void CheckCaches() } /* Check whether the caches are still valid */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { byte buff[sizeof(VehicleCargoList)]; memcpy(buff, &v->cargo, sizeof(VehicleCargoList)); v->cargo.InvalidateCache(); diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index fd2015c214..67092bc775 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -1800,14 +1800,12 @@ void CheckOrders(const Vehicle *v) */ void RemoveOrderFromAllVehicles(OrderType type, DestinationID destination, bool hangar) { - Vehicle *v; - /* Aircraft have StationIDs for depot orders and never use DepotIDs * This fact is handled specially below */ /* Go through all vehicles */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { Order *order; order = &v->current_order; diff --git a/src/road.cpp b/src/road.cpp index aa9935ad41..486dc0044c 100644 --- a/src/road.cpp +++ b/src/road.cpp @@ -324,8 +324,7 @@ bool CanBuildRoadTypeInfrastructure(RoadType roadtype, CompanyID company) } /* We should be able to build infrastructure when we have the actual vehicle type */ - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == VEH_ROAD && (company == OWNER_DEITY || v->owner == company) && HasBit(roadtypes, RoadVehicle::From(v)->roadtype) && HasPowerOnRoad(RoadVehicle::From(v)->roadtype, roadtype)) return true; } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 7a0e9aa916..8126a06d35 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -182,8 +182,7 @@ RoadType AllocateRoadType(RoadTypeLabel label, RoadTramType rtt) */ bool RoadVehiclesAreBuilt() { - const RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) return true; + for (const RoadVehicle *rv : RoadVehicle::Iterate()) return true; return false; } @@ -456,8 +455,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlag flags, RoadBits piec if (HasRoadWorks(tile)) { /* flooding tile with road works, don't forget to remove the effect vehicle too */ assert(_current_company == OWNER_WATER); - EffectVehicle *v; - FOR_ALL_EFFECTVEHICLES(v) { + for (EffectVehicle *v : EffectVehicle::Iterate()) { if (TileVirtXY(v->x_pos, v->y_pos) == tile) { delete v; } diff --git a/src/roadveh.h b/src/roadveh.h index cb26272737..028af9decb 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -319,6 +319,4 @@ protected: // These functions should not be called outside acceleration code. } }; -#define FOR_ALL_ROADVEHICLES(var) FOR_ALL_VEHICLES_OF_TYPE(RoadVehicle, var) - #endif /* ROADVEH_H */ diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 39ee5b845e..8df01bc582 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -278,8 +278,7 @@ static void InitializeWindowsAndCaches() (*it)->tile = t->xy; } } - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->IsFrontEngine()) { rv->CargoChanged(); } @@ -436,8 +435,8 @@ static void FixOwnerOfRailTrack(TileIndex t) assert(!Company::IsValidID(GetTileOwner(t)) && (IsLevelCrossingTile(t) || IsPlainRailTile(t))); /* remove leftover rail piece from crossing (from very old savegames) */ - Train *v = nullptr, *w; - FOR_ALL_TRAINS(w) { + Train *v = nullptr; + for (Train *w : Train::Iterate()) { if (w->tile == t) { v = w; break; @@ -1175,8 +1174,6 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_42)) { - Vehicle *v; - for (TileIndex t = 0; t < map_size; t++) { if (MayHaveBridgeAbove(t)) ClearBridgeMiddle(t); if (IsBridgeTile(t)) { @@ -1230,7 +1227,7 @@ bool AfterLoadGame() } } - FOR_ALL_VEHICLES(v) { + for (Vehicle* v : Vehicle::Iterate()) { if (!v->IsGroundVehicle()) continue; if (IsBridgeTile(v->tile)) { DiagDirection dir = GetTunnelBridgeDirection(v->tile); @@ -1289,8 +1286,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_24)) { RailType min_rail = RAILTYPE_ELECTRIC; - Train *v; - FOR_ALL_TRAINS(v) { + for (Train *v : Train::Iterate()) { RailType rt = RailVehInfo(v->engine_type)->railtype; v->railtype = rt; @@ -1327,7 +1323,7 @@ bool AfterLoadGame() } } - FOR_ALL_TRAINS(v) { + for (Train *v : Train::Iterate()) { if (v->IsFrontEngine() || v->IsFreeWagon()) v->ConsistChanged(CCF_TRACK); } @@ -1384,8 +1380,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_25)) { - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { rv->vehstatus &= ~0x40; } } @@ -1412,8 +1407,6 @@ bool AfterLoadGame() /* Time starts at 0 instead of 1920. * Account for this in older games by adding an offset */ if (IsSavegameVersionBefore(SLV_31)) { - Vehicle *v; - _date += DAYS_TILL_ORIGINAL_BASE_YEAR; _cur_year += ORIGINAL_BASE_YEAR; @@ -1423,7 +1416,7 @@ bool AfterLoadGame() for (Company *c : Company::Iterate()) c->inaugurated_year += ORIGINAL_BASE_YEAR; for (Industry *i : Industry::Iterate()) i->last_prod_year += ORIGINAL_BASE_YEAR; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { v->date_of_last_service += DAYS_TILL_ORIGINAL_BASE_YEAR; v->build_year += ORIGINAL_BASE_YEAR; } @@ -1451,13 +1444,11 @@ bool AfterLoadGame() /* Setting no refit flags to all orders in savegames from before refit in orders were added */ if (IsSavegameVersionBefore(SLV_36)) { - Vehicle *v; - for (Order *order : Order::Iterate()) { order->SetRefit(CT_NO_REFIT); } - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { v->current_order.SetRefit(CT_NO_REFIT); } } @@ -1536,13 +1527,12 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_45)) { - Vehicle *v; /* Originally just the fact that some cargo had been paid for was * stored to stop people cheating and cashing in several times. This * wasn't enough though as it was cleared when the vehicle started * loading again, even if it didn't actually load anything, so now the * amount that has been paid is stored. */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { ClrBit(v->vehicle_flags, 2); } } @@ -1556,9 +1546,8 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_50)) { - Aircraft *v; /* Aircraft units changed from 8 mph to 1 km-ish/h */ - FOR_ALL_AIRCRAFT(v) { + for (Aircraft *v : Aircraft::Iterate()) { if (v->subtype <= AIR_AIRCRAFT) { const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type); v->cur_speed *= 128; @@ -1592,9 +1581,8 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_57)) { - Vehicle *v; /* Added a FIFO queue of vehicles loading at stations */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if ((v->type != VEH_TRAIN || Train::From(v)->IsFrontEngine()) && // for all locs !(v->vehstatus & (VS_STOPPED | VS_CRASHED)) && // not stopped or crashed v->current_order.IsType(OT_LOADING)) { // loading @@ -1645,8 +1633,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_69)) { /* In some old savegames a bit was cleared when it should not be cleared */ - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->state == 250 || rv->state == 251) { SetBit(rv->state, 2); } @@ -1725,8 +1712,7 @@ bool AfterLoadGame() /* Rework of orders. */ for (Order *order : Order::Iterate()) order->ConvertFromOldSavegame(); - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->orders.list != nullptr && v->orders.list->GetFirstOrder() != nullptr && v->orders.list->GetFirstOrder()->IsType(OT_NOTHING)) { v->orders.list->FreeChain(); v->orders.list = nullptr; @@ -1747,8 +1733,7 @@ bool AfterLoadGame() } } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if ((v->current_order.GetUnloadType() & (OUFB_UNLOAD | OUFB_TRANSFER)) == (OUFB_UNLOAD | OUFB_TRANSFER)) { v->current_order.SetUnloadType(OUFB_TRANSFER); v->current_order.SetLoadType(OLFB_NO_LOAD); @@ -1897,8 +1882,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_88)) { /* Profits are now with 8 bit fract */ - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { v->profit_this_year <<= 8; v->profit_last_year <<= 8; v->running_ticks = 0; @@ -1919,8 +1903,7 @@ bool AfterLoadGame() GroupStatistics::UpdateAfterLoad(); // Ensure statistics pool is initialised before trying to delete vehicles /* Remove all trams from savegames without tram support. * There would be trams without tram track under causing crashes sooner or later. */ - RoadVehicle *v; - FOR_ALL_ROADVEHICLES(v) { + for (RoadVehicle *v : RoadVehicle::Iterate()) { if (v->First() == v && HasBit(EngInfo(v->engine_type)->misc_flags, EF_ROAD_TRAM)) { ShowErrorMessage(STR_WARNING_LOADGAME_REMOVED_TRAMS, INVALID_STRING_ID, WL_CRITICAL); delete v; @@ -1991,8 +1974,7 @@ bool AfterLoadGame() /* Reserve all tracks trains are currently on. */ if (IsSavegameVersionBefore(SLV_101)) { - const Train *t; - FOR_ALL_TRAINS(t) { + for (const Train *t : Train::Iterate()) { if (t->First() == t) t->ReserveTrackUnderConsist(); } } @@ -2022,8 +2004,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_104)) { - Aircraft *a; - FOR_ALL_AIRCRAFT(a) { + for (Aircraft *a : Aircraft::Iterate()) { /* Set engine_type of shadow and rotor */ if (!a->IsNormalAircraft()) { a->engine_type = a->First()->engine_type; @@ -2172,8 +2153,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_121)) { /* Delete small ufos heading for non-existing vehicles */ - Vehicle *v; - FOR_ALL_DISASTERVEHICLES(v) { + for (Vehicle *v : DisasterVehicle::Iterate()) { if (v->subtype == 2 /* ST_SMALL_UFO */ && v->current_order.GetDestination() != 0) { const Vehicle *u = Vehicle::GetIfValid(v->dest_tile); if (u == nullptr || u->type != VEH_ROAD || !RoadVehicle::From(u)->IsFrontEngine()) { @@ -2335,8 +2315,7 @@ bool AfterLoadGame() /* The behaviour of force_proceed has been changed. Now * it counts signals instead of some random time out. */ if (IsSavegameVersionBefore(SLV_131)) { - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { if (t->force_proceed != TFP_NONE) { t->force_proceed = TFP_STUCK; } @@ -2366,13 +2345,11 @@ bool AfterLoadGame() /* Wait counter and load/unload ticks got split. */ if (IsSavegameVersionBefore(SLV_136)) { - Aircraft *a; - FOR_ALL_AIRCRAFT(a) { + for (Aircraft *a : Aircraft::Iterate()) { a->turn_counter = a->current_order.IsType(OT_LOADING) ? 0 : a->load_unload_ticks; } - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { t->wait_counter = t->current_order.IsType(OT_LOADING) ? 0 : t->load_unload_ticks; } } @@ -2447,8 +2424,7 @@ bool AfterLoadGame() * For old savegames with such aircraft we just throw them in the air and * treat the aircraft like they were flying already. */ if (IsSavegameVersionBefore(SLV_146)) { - Aircraft *v; - FOR_ALL_AIRCRAFT(v) { + for (Aircraft *v : Aircraft::Iterate()) { if (!v->IsNormalAircraft()) continue; Station *st = GetTargetAirportIfValid(v); if (st == nullptr && v->state != FLYING) { @@ -2532,8 +2508,7 @@ bool AfterLoadGame() /* The moment vehicles go from hidden to visible changed. This means * that vehicles don't always get visible anymore causing things to * get messed up just after loading the savegame. This fixes that. */ - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { /* Not all vehicle types can be inside a tunnel. Furthermore, * testing IsTunnelTile() for invalid tiles causes a crash. */ if (!v->IsGroundVehicle()) continue; @@ -2596,8 +2571,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_153)) { - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->state == RVSB_IN_DEPOT || rv->state == RVSB_WORMHOLE) continue; bool loading = rv->current_order.IsType(OT_LOADING) || rv->current_order.IsType(OT_LEAVESTATION); @@ -2612,8 +2586,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_156)) { /* The train's pathfinder lost flag got moved. */ - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { if (!HasBit(t->flags, 5)) continue; ClrBit(t->flags, 5); @@ -2628,8 +2601,7 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_158)) { - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { switch (v->type) { case VEH_TRAIN: { Train *t = Train::From(v); @@ -2713,7 +2685,7 @@ bool AfterLoadGame() } /* Fill Vehicle::cur_real_order_index */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (!v->IsPrimaryVehicle()) continue; /* Older versions are less strict with indices being in range and fix them on the fly */ @@ -2733,8 +2705,7 @@ bool AfterLoadGame() * will keep reversing disabled, otherwise it'll be turned on. */ _settings_game.pf.reverse_at_signals = IsSavegameVersionBefore(SLV_100) || (_settings_game.pf.wait_oneway_signal != 255 && _settings_game.pf.wait_twoway_signal != 255 && _settings_game.pf.wait_for_pbs_path != 255); - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { _settings_game.vehicle.max_train_length = max(_settings_game.vehicle.max_train_length, CeilDiv(t->gcache.cached_total_length, TILE_SIZE)); } } @@ -2899,9 +2870,8 @@ bool AfterLoadGame() } if (IsSavegameVersionBefore(SLV_182)) { - Aircraft *v; /* Aircraft acceleration variable was bonkers */ - FOR_ALL_AIRCRAFT(v) { + for (Aircraft *v : Aircraft::Iterate()) { if (v->subtype <= AIR_AIRCRAFT) { const AircraftVehicleInfo *avi = AircraftVehInfo(v->engine_type); v->acceleration = avi->acceleration; @@ -2945,10 +2915,9 @@ bool AfterLoadGame() * Now they have the same length, but that means that trailing articulated parts will * take longer to go through the curve than the parts in front which already left the courve. * So, make articulated parts catch up. */ - RoadVehicle *v; bool roadside = _settings_game.vehicle.road_side == 1; std::vector skip_frames; - FOR_ALL_ROADVEHICLES(v) { + for (RoadVehicle *v : RoadVehicle::Iterate()) { if (!v->IsFrontEngine()) continue; skip_frames.clear(); TileIndex prev_tile = v->tile; @@ -3062,8 +3031,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_SHIPS_STOP_IN_LOCKS)) { /* Move ships from lock slope to upper or lower position. */ - Ship *s; - FOR_ALL_SHIPS(s) { + for (Ship *s : Ship::Iterate()) { /* Suitable tile? */ if (!IsTileType(s->tile, MP_WATER) || !IsLock(s->tile) || GetLockPart(s->tile) != LOCK_PART_MIDDLE) continue; diff --git a/src/saveload/cargopacket_sl.cpp b/src/saveload/cargopacket_sl.cpp index bb44c663fe..e9476fd4b1 100644 --- a/src/saveload/cargopacket_sl.cpp +++ b/src/saveload/cargopacket_sl.cpp @@ -21,14 +21,13 @@ /* static */ void CargoPacket::AfterLoad() { if (IsSavegameVersionBefore(SLV_44)) { - Vehicle *v; /* If we remove a station while cargo from it is still en route, payment calculation will assume * 0, 0 to be the source of the cargo, resulting in very high payments usually. v->source_xy * stores the coordinates, preserving them even if the station is removed. However, if a game is loaded * where this situation exists, the cargo-source information is lost. in this case, we set the source * to the current tile of the vehicle to prevent excessive profits */ - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { const CargoPacketList *packets = v->cargo.Packets(); for (VehicleCargoList::ConstIterator it(packets->begin()); it != packets->end(); it++) { CargoPacket *cp = *it; @@ -67,8 +66,7 @@ /* Only since version 68 we have cargo packets. Savegames from before used * 'new CargoPacket' + cargolist.Append so their caches are already * correct and do not need rebuilding. */ - Vehicle *v; - FOR_ALL_VEHICLES(v) v->cargo.InvalidateCache(); + for (Vehicle *v : Vehicle::Iterate()) v->cargo.InvalidateCache(); for (Station *st : Station::Iterate()) { for (CargoID c = 0; c < NUM_CARGO; c++) st->goods[c].cargo.InvalidateCache(); @@ -76,8 +74,7 @@ } if (IsSavegameVersionBefore(SLV_181)) { - Vehicle *v; - FOR_ALL_VEHICLES(v) v->cargo.KeepAll(); + for (Vehicle *v : Vehicle::Iterate()) v->cargo.KeepAll(); } } diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index d2befa84dc..830d300b68 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -172,9 +172,7 @@ static StringID *_old_vehicle_names; */ void FixOldVehicles() { - Vehicle *v; - - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if ((size_t)v->next == 0xFFFF) { v->next = nullptr; } else { @@ -384,8 +382,7 @@ static bool FixTTOEngines() 233, 234, 235, 236, 237, 238, 253 }; - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->engine_type >= lengthof(tto_to_ttd)) return false; v->engine_type = tto_to_ttd[v->engine_type]; } diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 08fc07157a..2df8d8167c 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -47,8 +47,7 @@ void MoveBuoysToWaypoints() for (Order *o = ol->GetFirstOrder(); o != nullptr; o = o->next) UpdateWaypointOrder(o); } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { VehicleType vt = v->type; if (vt != VEH_SHIP && vt != VEH_TRAIN) continue; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 74a01616bb..3569507c79 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -31,13 +31,11 @@ */ void ConnectMultiheadedTrains() { - Train *v; - - FOR_ALL_TRAINS(v) { + for (Train *v : Train::Iterate()) { v->other_multiheaded_part = nullptr; } - FOR_ALL_TRAINS(v) { + for (Train *v : Train::Iterate()) { if (v->IsFrontEngine() || v->IsFreeWagon()) { /* Two ways to associate multiheaded parts to each other: * sequential-matching: Trains shall be arranged to look like <..>..<..>..<..>.. @@ -111,10 +109,9 @@ void ConnectMultiheadedTrains() */ void ConvertOldMultiheadToNew() { - Train *t; - FOR_ALL_TRAINS(t) SetBit(t->subtype, 7); // indicates that it's the old format and needs to be converted in the next loop + for (Train *t : Train::Iterate()) SetBit(t->subtype, 7); // indicates that it's the old format and needs to be converted in the next loop - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { if (HasBit(t->subtype, 7) && ((t->subtype & ~0x80) == 0 || (t->subtype & ~0x80) == 4)) { for (Train *u = t; u != nullptr; u = u->Next()) { const RailVehicleInfo *rvi = RailVehInfo(u->engine_type); @@ -169,8 +166,7 @@ void UpdateOldAircraft() st->airport.flags = 0; // reset airport } - Aircraft *a; - FOR_ALL_AIRCRAFT(a) { + for (Aircraft *a : Aircraft::Iterate()) { /* airplane has another vehicle with subtype 4 (shadow), helicopter also has 3 (rotor) * skip those */ if (a->IsNormalAircraft()) { @@ -220,8 +216,7 @@ static void CheckValidVehicles() for (const Engine *e : Engine::IterateType(VEH_SHIP)) { first_engine[VEH_SHIP] = e->index; break; } for (const Engine *e : Engine::IterateType(VEH_AIRCRAFT)) { first_engine[VEH_AIRCRAFT] = e->index; break; } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { /* Test if engine types match */ switch (v->type) { case VEH_TRAIN: @@ -244,9 +239,7 @@ extern byte _age_cargo_skip_counter; // From misc_sl.cpp /** Called after load to update coordinates */ void AfterLoadVehicles(bool part_of_load) { - Vehicle *v; - - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { /* Reinstate the previous pointer */ if (v->Next() != nullptr) v->Next()->previous = v; if (v->NextShared() != nullptr) v->NextShared()->previous_shared = v; @@ -267,7 +260,7 @@ void AfterLoadVehicles(bool part_of_load) */ std::map mapping; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->orders.old != nullptr) { if (IsSavegameVersionBefore(SLV_105)) { // Pre-105 didn't save an OrderList if (mapping[v->orders.old] == nullptr) { @@ -294,7 +287,7 @@ void AfterLoadVehicles(bool part_of_load) } } - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { /* Fill the first pointers */ if (v->Previous() == nullptr) { for (Vehicle *u = v; u != nullptr; u = u->Next()) { @@ -306,7 +299,7 @@ void AfterLoadVehicles(bool part_of_load) if (part_of_load) { if (IsSavegameVersionBefore(SLV_105)) { /* Before 105 there was no order for shared orders, thus it messed up horribly */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->First() != v || v->orders.list != nullptr || v->previous_shared != nullptr || v->next_shared == nullptr) continue; /* As above, allocating OrderList here is safe. */ @@ -320,8 +313,7 @@ void AfterLoadVehicles(bool part_of_load) if (IsSavegameVersionBefore(SLV_157)) { /* The road vehicle subtype was converted to a flag. */ - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->subtype == 0) { /* The road vehicle is at the front. */ rv->SetFrontEngine(); @@ -337,7 +329,7 @@ void AfterLoadVehicles(bool part_of_load) if (IsSavegameVersionBefore(SLV_160)) { /* In some old savegames there might be some "crap" stored. */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (!v->IsPrimaryVehicle() && v->type != VEH_DISASTER) { v->current_order.Free(); v->unitnumber = 0; @@ -347,14 +339,14 @@ void AfterLoadVehicles(bool part_of_load) if (IsSavegameVersionBefore(SLV_162)) { /* Set the vehicle-local cargo age counter from the old global counter. */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { v->cargo_age_counter = _age_cargo_skip_counter; } } if (IsSavegameVersionBefore(SLV_180)) { /* Set service interval flags */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (!v->IsPrimaryVehicle()) continue; const Company *c = Company::Get(v->owner); @@ -367,13 +359,11 @@ void AfterLoadVehicles(bool part_of_load) if (IsSavegameVersionBefore(SLV_SHIP_ROTATION)) { /* Ship rotation added */ - Ship *s; - FOR_ALL_SHIPS(s) { + for (Ship *s : Ship::Iterate()) { s->rotation = s->direction; } } else { - Ship *s; - FOR_ALL_SHIPS(s) { + for (Ship *s : Ship::Iterate()) { if (s->rotation == s->direction) continue; /* In case we are rotating on gameload, set the rotation position to * the current position, otherwise the applied workaround offset would @@ -387,7 +377,7 @@ void AfterLoadVehicles(bool part_of_load) CheckValidVehicles(); - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { assert(v->first != nullptr); v->trip_occupancy = CalcPercentVehicleFilled(v, nullptr); @@ -432,7 +422,7 @@ void AfterLoadVehicles(bool part_of_load) /* Stop non-front engines */ if (part_of_load && IsSavegameVersionBefore(SLV_112)) { - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->type == VEH_TRAIN) { Train *t = Train::From(v); if (!t->IsFrontEngine()) { @@ -450,7 +440,7 @@ void AfterLoadVehicles(bool part_of_load) } } - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { switch (v->type) { case VEH_ROAD: case VEH_TRAIN: @@ -494,8 +484,7 @@ void FixupTrainLengths() { /* Vehicle center was moved from 4 units behind the front to half the length * behind the front. Move vehicles so they end up on the same spot. */ - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->type == VEH_TRAIN && v->IsPrimaryVehicle()) { /* The vehicle center is now more to the front depending on vehicle length, * so we need to move all vehicles forward to cover the difference to the @@ -892,9 +881,8 @@ const SaveLoad *GetVehicleDescription(VehicleType vt) /** Will be called when the vehicles need to be saved. */ static void Save_VEHS() { - Vehicle *v; /* Write the vehicles */ - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { SlSetArrayIndex(v->index); SlObject(v, GetVehicleDescription(v->type)); } @@ -951,8 +939,7 @@ void Load_VEHS() static void Ptrs_VEHS() { - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { SlObject(v, GetVehicleDescription(v->type)); } } diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index ddb11082ef..c0570f81d3 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -136,8 +136,7 @@ void MoveWaypointsToBaseStations() for (Order *o = ol->GetFirstOrder(); o != nullptr; o = o->next) UpdateWaypointOrder(o); } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->type != VEH_TRAIN) continue; UpdateWaypointOrder(&v->current_order); diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 67aa1ac350..7f80815864 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -154,8 +154,7 @@ Money profit = 0; - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->group_id != group_id) continue; if (!v->IsPrimaryVehicle()) continue; @@ -179,8 +178,7 @@ uint32 occupancy = 0; uint32 vehicle_count = 0; - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->group_id != group_id) continue; if (!v->IsPrimaryVehicle()) continue; diff --git a/src/script/api/script_vehiclelist.cpp b/src/script/api/script_vehiclelist.cpp index 727306231e..58c03ff9a9 100644 --- a/src/script/api/script_vehiclelist.cpp +++ b/src/script/api/script_vehiclelist.cpp @@ -20,8 +20,7 @@ ScriptVehicleList::ScriptVehicleList() { - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && (v->IsPrimaryVehicle() || (v->type == VEH_TRAIN && ::Train::From(v)->IsFreeWagon()))) this->AddItem(v->index); } } @@ -30,8 +29,7 @@ ScriptVehicleList_Station::ScriptVehicleList_Station(StationID station_id) { if (!ScriptBaseStation::IsValidBaseStation(station_id)) return; - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && v->IsPrimaryVehicle()) { const Order *order; @@ -81,8 +79,7 @@ ScriptVehicleList_Depot::ScriptVehicleList_Depot(TileIndex tile) return; } - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == ScriptObject::GetCompany() || ScriptObject::GetCompany() == OWNER_DEITY) && v->IsPrimaryVehicle() && v->type == type) { const Order *order; @@ -109,8 +106,7 @@ ScriptVehicleList_Group::ScriptVehicleList_Group(GroupID group_id) { if (!ScriptGroup::IsValidGroup((ScriptGroup::GroupID)group_id)) return; - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->owner == ScriptObject::GetCompany() && v->IsPrimaryVehicle()) { if (v->group_id == group_id) this->AddItem(v->index); } @@ -121,8 +117,7 @@ ScriptVehicleList_DefaultGroup::ScriptVehicleList_DefaultGroup(ScriptVehicle::Ve { if (vehicle_type < ScriptVehicle::VT_RAIL || vehicle_type > ScriptVehicle::VT_AIR) return; - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->owner == ScriptObject::GetCompany() && v->IsPrimaryVehicle()) { if (v->type == (::VehicleType)vehicle_type && v->group_id == ScriptGroup::GROUP_DEFAULT) this->AddItem(v->index); } diff --git a/src/settings.cpp b/src/settings.cpp index 98c2738764..0a7ac89ac3 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -888,8 +888,7 @@ static bool DeleteSelectStationWindow(int32 p1) static bool UpdateConsists(int32 p1) { - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { /* Update the consist of all trains so the maximum speed is set correctly. */ if (t->IsFrontEngine() || t->IsFreeWagon()) t->ConsistChanged(CCF_TRACK); } @@ -924,8 +923,7 @@ static bool CheckInterval(int32 p1) if (update_vehicles) { const Company *c = Company::Get(_current_company); - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->owner == _current_company && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) { v->SetServiceInterval(CompanyServiceInterval(c, v->type)); v->SetServiceIntervalIsPercent(p1 != 0); @@ -955,8 +953,7 @@ static bool UpdateInterval(VehicleType type, int32 p1) if (interval != p1) return false; if (update_vehicles) { - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->owner == _current_company && v->type == type && v->IsPrimaryVehicle() && !v->ServiceIntervalIsCustom()) { v->SetServiceInterval(p1); } @@ -990,8 +987,7 @@ static bool UpdateIntervalAircraft(int32 p1) static bool TrainAccelerationModelChanged(int32 p1) { - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { if (t->IsFrontEngine()) { t->tcache.cached_max_curve_speed = t->GetCurveSpeedLimit(); t->UpdateAcceleration(); @@ -1013,8 +1009,7 @@ static bool TrainAccelerationModelChanged(int32 p1) */ static bool TrainSlopeSteepnessChanged(int32 p1) { - Train *t; - FOR_ALL_TRAINS(t) { + for (Train *t : Train::Iterate()) { if (t->IsFrontEngine()) t->CargoChanged(); } @@ -1029,8 +1024,7 @@ static bool TrainSlopeSteepnessChanged(int32 p1) static bool RoadVehAccelerationModelChanged(int32 p1) { if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) { - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->IsFrontEngine()) { rv->CargoChanged(); } @@ -1052,8 +1046,7 @@ static bool RoadVehAccelerationModelChanged(int32 p1) */ static bool RoadVehSlopeSteepnessChanged(int32 p1) { - RoadVehicle *rv; - FOR_ALL_ROADVEHICLES(rv) { + for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->IsFrontEngine()) rv->CargoChanged(); } @@ -1225,8 +1218,7 @@ static bool CheckFreeformEdges(int32 p1) { if (_game_mode == GM_MENU) return true; if (p1 != 0) { - Ship *s; - FOR_ALL_SHIPS(s) { + for (Ship *s : Ship::Iterate()) { /* Check if there is a ship on the northern border. */ if (TileX(s->tile) == 0 || TileY(s->tile) == 0) { ShowErrorMessage(STR_CONFIG_SETTING_EDGES_NOT_EMPTY, INVALID_STRING_ID, WL_ERROR); @@ -1334,8 +1326,7 @@ static bool MaxVehiclesChanged(int32 p1) static bool InvalidateShipPathCache(int32 p1) { - Ship *s; - FOR_ALL_SHIPS(s) { + for (Ship *s : Ship::Iterate()) { s->path.clear(); } return true; diff --git a/src/ship.h b/src/ship.h index 282b943601..f3e56c39fe 100644 --- a/src/ship.h +++ b/src/ship.h @@ -57,10 +57,4 @@ struct Ship FINAL : public SpecializedVehicle { bool IsShipDestinationTile(TileIndex tile, StationID station); -/** - * Iterate over all ships. - * @param var The variable used for iteration. - */ -#define FOR_ALL_SHIPS(var) FOR_ALL_VEHICLES_OF_TYPE(Ship, var) - #endif /* SHIP_H */ diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index d76c4652fb..d8816265d8 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -876,8 +876,7 @@ void SmallMapWindow::DrawSmallMapColumn(void *dst, uint xc, uint yc, int pitch, */ void SmallMapWindow::DrawVehicles(const DrawPixelInfo *dpi, Blitter *blitter) const { - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == VEH_EFFECT) continue; if (v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) continue; diff --git a/src/station.cpp b/src/station.cpp index 01311ece3a..3e00bdb149 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -97,8 +97,7 @@ Station::~Station() this->loading_vehicles.front()->LeaveStation(); } - Aircraft *a; - FOR_ALL_AIRCRAFT(a) { + for (Aircraft *a : Aircraft::Iterate()) { if (!a->IsNormalAircraft()) continue; if (a->targetairport == this->index) a->targetairport = INVALID_STATION; } @@ -122,8 +121,7 @@ Station::~Station() } } - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { /* Forget about this station if this station is removed */ if (v->last_station_visited == this->index) { v->last_station_visited = INVALID_STATION; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 4b2acb2db2..86b3aedaef 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2033,8 +2033,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlag flags) delete cur_stop; /* Make sure no vehicle is going to the old roadstop */ - RoadVehicle *v; - FOR_ALL_ROADVEHICLES(v) { + for (RoadVehicle *v : RoadVehicle::Iterate()) { if (v->First() == v && v->current_order.IsType(OT_GOTO_STATION) && v->dest_tile == tile) { v->SetDestTile(v->GetOrderStationLocation(st->index)); @@ -2380,8 +2379,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlag flags) CommandCost cost(EXPENSES_CONSTRUCTION); - const Aircraft *a; - FOR_ALL_AIRCRAFT(a) { + for (const Aircraft *a : Aircraft::Iterate()) { if (!a->IsNormalAircraft()) continue; if (a->targetairport == st->index && a->state != FLYING) { return_cmd_error(STR_ERROR_AIRCRAFT_IN_THE_WAY); @@ -2480,8 +2478,7 @@ CommandCost CmdOpenCloseAirport(TileIndex tile, DoCommandFlag flags, uint32 p1, */ bool HasStationInUse(StationID station, bool include_company, CompanyID company) { - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if ((v->owner == company) == include_company) { const Order *order; FOR_VEHICLE_ORDERS(v, order) { @@ -2721,8 +2718,7 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlag flags) * will be selected and in case of no appropriate order it will just * wander around the world. */ if (!(st->facilities & FACIL_DOCK)) { - Ship *s; - FOR_ALL_SHIPS(s) { + for (Ship *s : Ship::Iterate()) { if (s->current_order.IsType(OT_LOADING) && s->current_order.GetDestination() == st->index) { s->LeaveStation(); } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 6a227b6989..9a58ff4374 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -757,10 +757,9 @@ static CallBackFunction MenuClickIndustry(int index) static void ToolbarVehicleClick(Window *w, VehicleType veh) { - const Vehicle *v; int dis = ~0; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == veh && v->IsPrimaryVehicle()) ClrBit(dis, v->owner); } PopupMainCompanyToolbMenu(w, WID_TN_VEHICLE_START + veh, dis); diff --git a/src/train.h b/src/train.h index 895021d916..af638c283d 100644 --- a/src/train.h +++ b/src/train.h @@ -333,6 +333,4 @@ protected: // These functions should not be called outside acceleration code. } }; -#define FOR_ALL_TRAINS(var) FOR_ALL_VEHICLES_OF_TYPE(Train, var) - #endif /* TRAIN_H */ diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index ae769374a6..5d02764b55 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -71,10 +71,9 @@ byte FreightWagonMult(CargoID cargo) /** Checks if lengths of all rail vehicles are valid. If not, shows an error message. */ void CheckTrainsLengths() { - const Train *v; bool first = true; - FOR_ALL_TRAINS(v) { + for (const Train *v : Train::Iterate()) { if (v->First() == v && !(v->vehstatus & VS_CRASHED)) { for (const Train *u = v, *w = v->Next(); w != nullptr; u = w, w = w->Next()) { if (u->track != TRACK_BIT_DEPOT) { @@ -641,8 +640,7 @@ static CommandCost CmdBuildRailWagon(TileIndex tile, DoCommandFlag flags, const CheckConsistencyOfArticulatedVehicle(v); /* Try to connect the vehicle to one of free chains of wagons. */ - Train *w; - FOR_ALL_TRAINS(w) { + for (Train *w : Train::Iterate()) { if (w->tile == tile && ///< Same depot w->IsFreeWagon() && ///< A free wagon chain w->engine_type == e->index && ///< Same type @@ -660,8 +658,7 @@ static CommandCost CmdBuildRailWagon(TileIndex tile, DoCommandFlag flags, const /** Move all free vehicles in the depot to the train */ static void NormalizeTrainVehInDepot(const Train *u) { - const Train *v; - FOR_ALL_TRAINS(v) { + for (const Train *v : Train::Iterate()) { if (v->IsFreeWagon() && v->tile == u->tile && v->track == TRACK_BIT_DEPOT) { if (DoCommand(0, v->index | 1 << 20, u->index, DC_EXEC, @@ -796,8 +793,7 @@ static Train *FindGoodVehiclePos(const Train *src) EngineID eng = src->engine_type; TileIndex tile = src->tile; - Train *dst; - FOR_ALL_TRAINS(dst) { + for (Train *dst : Train::Iterate()) { if (dst->IsFreeWagon() && dst->tile == tile && !(dst->vehstatus & VS_CRASHED)) { /* check so all vehicles in the line have the same engine. */ Train *t = dst; diff --git a/src/train_gui.cpp b/src/train_gui.cpp index 6da1854648..476c8f9cdf 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -33,8 +33,7 @@ void CcBuildWagon(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p /* find a locomotive in the depot. */ const Vehicle *found = nullptr; - const Train *t; - FOR_ALL_TRAINS(t) { + for (const Train *t : Train::Iterate()) { if (t->IsFrontEngine() && t->tile == tile && t->IsStoppedInDepot()) { if (found != nullptr) return; // must be exactly one. found = t; diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 57e00418ac..806bf47959 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -670,16 +670,14 @@ static void UpdateVehicleViewportHash(Vehicle *v, int x, int y) void ResetVehicleHash() { - Vehicle *v; - FOR_ALL_VEHICLES(v) { v->hash_tile_current = nullptr; } + for (Vehicle *v : Vehicle::Iterate()) { v->hash_tile_current = nullptr; } memset(_vehicle_viewport_hash, 0, sizeof(_vehicle_viewport_hash)); memset(_vehicle_tile_hash, 0, sizeof(_vehicle_tile_hash)); } void ResetVehicleColourMap() { - Vehicle *v; - FOR_ALL_VEHICLES(v) { v->colourmap = PAL_NONE; } + for (Vehicle *v : Vehicle::Iterate()) { v->colourmap = PAL_NONE; } } /** @@ -954,8 +952,8 @@ void CallVehicleTicks() PerformanceAccumulator::Reset(PFE_GL_SHIPS); PerformanceAccumulator::Reset(PFE_GL_AIRCRAFT); - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { + size_t vehicle_index = v->index; /* Vehicle could be deleted in this tick */ if (!v->Tick()) { assert(Vehicle::Get(vehicle_index) == nullptr); @@ -1026,7 +1024,7 @@ void CallVehicleTicks() Backup cur_company(_current_company, FILE_LINE); for (auto &it : _vehicles_to_autoreplace) { - v = it.first; + Vehicle *v = it.first; /* Autoreplace needs the current company set as the vehicle owner */ cur_company.Change(v->owner); @@ -1166,7 +1164,7 @@ void ViewportAddVehicles(DrawPixelInfo *dpi) */ Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y) { - Vehicle *found = nullptr, *v; + Vehicle *found = nullptr; uint dist, best_dist = UINT_MAX; if ((uint)(x -= vp->left) >= (uint)vp->width || (uint)(y -= vp->top) >= (uint)vp->height) return nullptr; @@ -1174,7 +1172,7 @@ Vehicle *CheckClickOnVehicle(const ViewPort *vp, int x, int y) x = ScaleByZoom(x, vp->zoom) + vp->virtual_left; y = ScaleByZoom(y, vp->zoom) + vp->virtual_top; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if ((v->vehstatus & (VS_HIDDEN | VS_UNCLICKABLE)) == 0 && x >= v->coord.left && x <= v->coord.right && y >= v->coord.top && y <= v->coord.bottom) { @@ -1688,8 +1686,7 @@ VehicleEnterTileStatus VehicleEnterTile(Vehicle *v, TileIndex tile, int x, int y FreeUnitIDGenerator::FreeUnitIDGenerator(VehicleType type, CompanyID owner) : cache(nullptr), maxid(0), curid(0) { /* Find maximum */ - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == type && v->owner == owner) { this->maxid = max(this->maxid, v->unitnumber); } @@ -1703,7 +1700,7 @@ FreeUnitIDGenerator::FreeUnitIDGenerator(VehicleType type, CompanyID owner) : ca this->cache = CallocT(this->maxid + 2); /* Fill the cache */ - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == type && v->owner == owner) { this->cache[v->unitnumber] = true; } @@ -1787,8 +1784,7 @@ bool CanBuildVehicleInfrastructure(VehicleType type, byte subtype) } /* We should be able to build infrastructure when we have the actual vehicle type */ - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (type == VEH_ROAD && GetRoadTramType(RoadVehicle::From(v)->roadtype) != (RoadTramType)subtype) continue; if (v->owner == _local_company && v->type == type) return true; } @@ -2745,8 +2741,7 @@ void Vehicle::RemoveFromShared() void VehiclesYearlyLoop() { - Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (Vehicle *v : Vehicle::Iterate()) { if (v->IsPrimaryVehicle()) { /* show warning if vehicle is not generating enough income last 2 years (corresponds to a red icon in the vehicle list) */ Money profit = v->GetDisplayProfitThisYear(); diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 4c2aa891a7..bc72c6bbfd 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -971,19 +971,6 @@ public: } }; -/** - * Iterate over all vehicles from a given point. - * @param var The variable used to iterate over. - * @param start The vehicle to start the iteration at. - */ -#define FOR_ALL_VEHICLES_FROM(var, start) FOR_ALL_ITEMS_FROM(Vehicle, vehicle_index, var, start) - -/** - * Iterate over all vehicles. - * @param var The variable used to iterate over. - */ -#define FOR_ALL_VEHICLES(var) FOR_ALL_VEHICLES_FROM(var, 0) - /** * Class defining several overloaded accessors so we don't * have to cast vehicle types that often @@ -1146,14 +1133,14 @@ struct SpecializedVehicle : public Vehicle { this->Vehicle::UpdateViewport(true); } } -}; -/** - * Iterate over all vehicles of a particular type. - * @param name The type of vehicle to iterate over. - * @param var The variable used to iterate over. - */ -#define FOR_ALL_VEHICLES_OF_TYPE(name, var) FOR_ALL_ITEMS_FROM(name, vehicle_index, var, 0) if (var->type == name::EXPECTED_TYPE) + /** + * Returns an iterable ensemble of all valid vehicles of type T + * @param from index of the first vehicle to consider + * @return an iterable ensemble of all valid vehicles of type T + */ + static Pool::IterateWrapper Iterate(size_t from = 0) { return Pool::IterateWrapper(from); } +}; /** Generates sequence of free UnitID numbers */ struct FreeUnitIDGenerator { diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index f935bc5df7..5ba31945fc 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -747,9 +747,7 @@ CommandCost CmdDepotMassAutoReplace(TileIndex tile, DoCommandFlag flags, uint32 */ static bool IsUniqueVehicleName(const char *name) { - const Vehicle *v; - - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->name != nullptr && strcmp(v->name, name) == 0) return false; } diff --git a/src/vehiclelist.cpp b/src/vehiclelist.cpp index 0beccdd400..de37e3abae 100644 --- a/src/vehiclelist.cpp +++ b/src/vehiclelist.cpp @@ -71,8 +71,7 @@ void BuildDepotVehicleList(VehicleType type, TileIndex tile, VehicleList *engine engines->clear(); if (wagons != nullptr && wagons != engines) wagons->clear(); - const Vehicle *v; - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { /* General tests for all vehicle types */ if (v->type != type) continue; if (v->tile != tile) continue; @@ -115,11 +114,9 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli { list->clear(); - const Vehicle *v; - switch (vli.type) { case VL_STATION_LIST: - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == vli.vtype && v->IsPrimaryVehicle()) { const Order *order; @@ -134,19 +131,20 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli } break; - case VL_SHARED_ORDERS: + case VL_SHARED_ORDERS: { /* Add all vehicles from this vehicle's shared order list */ - v = Vehicle::GetIfValid(vli.index); + const Vehicle *v = Vehicle::GetIfValid(vli.index); if (v == nullptr || v->type != vli.vtype || !v->IsPrimaryVehicle()) return false; for (; v != nullptr; v = v->NextShared()) { list->push_back(v); } break; + } case VL_GROUP_LIST: if (vli.index != ALL_GROUP) { - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == vli.vtype && v->IsPrimaryVehicle() && v->owner == vli.company && GroupIsInGroup(v->group_id, vli.index)) { list->push_back(v); @@ -157,7 +155,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli FALLTHROUGH; case VL_STANDARD: - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == vli.vtype && v->owner == vli.company && v->IsPrimaryVehicle()) { list->push_back(v); } @@ -165,7 +163,7 @@ bool GenerateVehicleSortList(VehicleList *list, const VehicleListIdentifier &vli break; case VL_DEPOT_LIST: - FOR_ALL_VEHICLES(v) { + for (const Vehicle *v : Vehicle::Iterate()) { if (v->type == vli.vtype && v->IsPrimaryVehicle()) { const Order *order; From 11f178a312d1a601aa14f9188f05f4a4cd033cf9 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 18:57:53 +0100 Subject: [PATCH 23/84] Codechange: Replace FOR_ALL_STORAGES with range-based for loops --- src/newgrf_storage.h | 3 --- src/saveload/storage_sl.cpp | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/newgrf_storage.h b/src/newgrf_storage.h index 153d4c91d5..61206a587b 100644 --- a/src/newgrf_storage.h +++ b/src/newgrf_storage.h @@ -230,7 +230,4 @@ struct PersistentStorage : PersistentStorageArray, PersistentStorage assert_compile(cpp_lengthof(OldPersistentStorage, storage) <= cpp_lengthof(PersistentStorage, storage)); -#define FOR_ALL_STORAGES_FROM(var, start) FOR_ALL_ITEMS_FROM(PersistentStorage, storage_index, var, start) -#define FOR_ALL_STORAGES(var) FOR_ALL_STORAGES_FROM(var, 0) - #endif /* NEWGRF_STORAGE_H */ diff --git a/src/saveload/storage_sl.cpp b/src/saveload/storage_sl.cpp index 8c8a96915f..7abe396f38 100644 --- a/src/saveload/storage_sl.cpp +++ b/src/saveload/storage_sl.cpp @@ -36,10 +36,8 @@ static void Load_PSAC() /** Save persistent storage data. */ static void Save_PSAC() { - PersistentStorage *ps; - /* Write the industries */ - FOR_ALL_STORAGES(ps) { + for (PersistentStorage *ps : PersistentStorage::Iterate()) { ps->ClearChanges(); SlSetArrayIndex(ps->index); SlObject(ps, _storage_desc); From 514565fad6d3a7e93a24b53b29eb901ef4f6a166 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 19:05:46 +0100 Subject: [PATCH 24/84] Codechange: Replace FOR_ALL_OBJECTS with range-based for loops --- src/newgrf_object.cpp | 3 +-- src/object_base.h | 3 --- src/object_cmd.cpp | 3 +-- src/saveload/afterload.cpp | 6 ++---- src/saveload/object_sl.cpp | 7 ++----- src/town_cmd.cpp | 6 ++---- 6 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/newgrf_object.cpp b/src/newgrf_object.cpp index 417dc2a4e5..34e18c43a2 100644 --- a/src/newgrf_object.cpp +++ b/src/newgrf_object.cpp @@ -186,8 +186,7 @@ static uint32 GetNearbyObjectTileInformation(byte parameter, TileIndex tile, Obj static uint32 GetClosestObject(TileIndex tile, ObjectType type, const Object *current) { uint32 best_dist = UINT32_MAX; - const Object *o; - FOR_ALL_OBJECTS(o) { + for (const Object *o : Object::Iterate()) { if (o->type != type || o == current) continue; best_dist = min(best_dist, DistanceManhattan(tile, o->location.tile)); diff --git a/src/object_base.h b/src/object_base.h index 1ea5fe09d5..a468a01ee9 100644 --- a/src/object_base.h +++ b/src/object_base.h @@ -78,9 +78,6 @@ protected: static uint16 counts[NUM_OBJECTS]; ///< Number of objects per type ingame }; -#define FOR_ALL_OBJECTS_FROM(var, start) FOR_ALL_ITEMS_FROM(Object, object_index, var, start) -#define FOR_ALL_OBJECTS(var) FOR_ALL_OBJECTS_FROM(var, 0) - /** * Keeps track of removed objects during execution/testruns of commands. */ diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 1e34b78d8d..3fb61d647e 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -173,8 +173,7 @@ void UpdateCompanyHQ(TileIndex tile, uint score) */ void UpdateObjectColours(const Company *c) { - Object *obj; - FOR_ALL_OBJECTS(obj) { + for (Object *obj : Object::Iterate()) { Owner owner = GetTileOwner(obj->location.tile); /* Not the current owner, so colour doesn't change. */ if (owner != c->index) continue; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 8df01bc582..d175b612f7 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -253,8 +253,7 @@ static void InitializeWindowsAndCaches() } /* Count number of objects per type */ - Object *o; - FOR_ALL_OBJECTS(o) { + for (Object *o : Object::Iterate()) { Object::IncTypeCount(o->type); } @@ -2474,8 +2473,7 @@ bool AfterLoadGame() /* Add (random) colour to all objects. */ if (IsSavegameVersionBefore(SLV_148)) { - Object *o; - FOR_ALL_OBJECTS(o) { + for (Object *o : Object::Iterate()) { Owner owner = GetTileOwner(o->location.tile); o->colour = (owner == OWNER_NONE) ? Random() & 0xF : Company::Get(owner)->livery->colour1; } diff --git a/src/saveload/object_sl.cpp b/src/saveload/object_sl.cpp index b0c4e75130..2c385b6552 100644 --- a/src/saveload/object_sl.cpp +++ b/src/saveload/object_sl.cpp @@ -31,10 +31,8 @@ static const SaveLoad _object_desc[] = { static void Save_OBJS() { - Object *o; - /* Write the objects */ - FOR_ALL_OBJECTS(o) { + for (Object *o : Object::Iterate()) { SlSetArrayIndex(o->index); SlObject(o, _object_desc); } @@ -51,8 +49,7 @@ static void Load_OBJS() static void Ptrs_OBJS() { - Object *o; - FOR_ALL_OBJECTS(o) { + for (Object *o : Object::Iterate()) { SlObject(o, _object_desc); if (IsSavegameVersionBefore(SLV_148) && !IsTileType(o->location.tile, MP_OBJECT)) { /* Due to a small bug stale objects could remain. */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index d97dee3b47..3fbf26e1d7 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -115,8 +115,7 @@ Town::~Town() for (const Industry *i : Industry::Iterate()) assert(i->town != this); /* ... and no object is related to us. */ - const Object *o; - FOR_ALL_OBJECTS(o) assert(o->town != this); + for (const Object *o : Object::Iterate()) assert(o->town != this); /* Check no tile is related to us. */ for (TileIndex tile = 0; tile < MapSize(); ++tile) { @@ -159,8 +158,7 @@ void Town::PostDestructor(size_t index) UpdateNearestTownForRoadTiles(false); /* Give objects a new home! */ - Object *o; - FOR_ALL_OBJECTS(o) { + for (Object *o : Object::Iterate()) { if (o->town == nullptr) o->town = CalcClosestTownFromTile(o->location.tile, UINT_MAX); } } From b91abd3af98cca51221210198e2c9607055c19b2 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 19:11:24 +0100 Subject: [PATCH 25/84] Codechange: Replace FOR_ALL_ROADSTOPS with range-based for loops --- src/openttd.cpp | 3 +-- src/roadstop_base.h | 3 --- src/saveload/station_sl.cpp | 12 ++++-------- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/openttd.cpp b/src/openttd.cpp index 63d5bf7564..c7af56be1d 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1221,8 +1221,7 @@ static void CheckCaches() } /* Strict checking of the road stop cache entries */ - const RoadStop *rs; - FOR_ALL_ROADSTOPS(rs) { + for (const RoadStop *rs : RoadStop::Iterate()) { if (IsStandardRoadStopTile(rs->xy)) continue; assert(rs->GetEntry(DIAGDIR_NE) != rs->GetEntry(DIAGDIR_NW)); diff --git a/src/roadstop_base.h b/src/roadstop_base.h index 475bd7cb8e..768b54282d 100644 --- a/src/roadstop_base.h +++ b/src/roadstop_base.h @@ -188,7 +188,4 @@ private: } }; -#define FOR_ALL_ROADSTOPS_FROM(var, start) FOR_ALL_ITEMS_FROM(RoadStop, roadstop_index, var, start) -#define FOR_ALL_ROADSTOPS(var) FOR_ALL_ROADSTOPS_FROM(var, 0) - #endif /* ROADSTOP_BASE_H */ diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 2df8d8167c..1d3612ae31 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -129,12 +129,11 @@ void AfterLoadStations() void AfterLoadRoadStops() { /* First construct the drive through entries */ - RoadStop *rs; - FOR_ALL_ROADSTOPS(rs) { + for (RoadStop *rs : RoadStop::Iterate()) { if (IsDriveThroughStopTile(rs->xy)) rs->MakeDriveThrough(); } /* And then rebuild the data in those entries */ - FOR_ALL_ROADSTOPS(rs) { + for (RoadStop *rs : RoadStop::Iterate()) { if (!HasBit(rs->status, RoadStop::RSSFB_BASE_ENTRY)) continue; rs->GetEntry(DIAGDIR_NE)->Rebuild(rs); @@ -606,9 +605,7 @@ static void Ptrs_STNN() static void Save_ROADSTOP() { - RoadStop *rs; - - FOR_ALL_ROADSTOPS(rs) { + for (RoadStop *rs : RoadStop::Iterate()) { SlSetArrayIndex(rs->index); SlObject(rs, _roadstop_desc); } @@ -627,8 +624,7 @@ static void Load_ROADSTOP() static void Ptrs_ROADSTOP() { - RoadStop *rs; - FOR_ALL_ROADSTOPS(rs) { + for (RoadStop *rs : RoadStop::Iterate()) { SlObject(rs, _roadstop_desc); } } From 869581eb238b820574d64cd8dabc9324cd7a0dd5 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 19:14:42 +0100 Subject: [PATCH 26/84] Codechange: Replace FOR_ALL_SIGNS with range-based for loops --- src/economy.cpp | 3 +-- src/saveload/afterload.cpp | 3 +-- src/saveload/signs_sl.cpp | 4 +--- src/script/api/script_signlist.cpp | 3 +-- src/signs.cpp | 4 +--- src/signs_base.h | 3 --- src/signs_gui.cpp | 3 +-- src/viewport.cpp | 3 +-- 8 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index a4e476537a..b4a7d68093 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -521,8 +521,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) } } - Sign *si; - FOR_ALL_SIGNS(si) { + for (Sign *si : Sign::Iterate()) { if (si->owner == old_owner) si->owner = new_owner == INVALID_OWNER ? OWNER_NONE : new_owner; } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index d175b612f7..f4e81b75bb 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1990,8 +1990,7 @@ bool AfterLoadGame() UpdateNearestTownForRoadTiles(false); /* signs with invalid owner left from older savegames */ - Sign *si; - FOR_ALL_SIGNS(si) { + for (Sign *si : Sign::Iterate()) { if (si->owner != OWNER_NONE && !Company::IsValidID(si->owner)) si->owner = OWNER_NONE; } diff --git a/src/saveload/signs_sl.cpp b/src/saveload/signs_sl.cpp index 33be36d9c7..0be96e9821 100644 --- a/src/saveload/signs_sl.cpp +++ b/src/saveload/signs_sl.cpp @@ -32,9 +32,7 @@ static const SaveLoad _sign_desc[] = { /** Save all signs */ static void Save_SIGN() { - Sign *si; - - FOR_ALL_SIGNS(si) { + for (Sign *si : Sign::Iterate()) { SlSetArrayIndex(si->index); SlObject(si, _sign_desc); } diff --git a/src/script/api/script_signlist.cpp b/src/script/api/script_signlist.cpp index 7288d7568c..c64891a903 100644 --- a/src/script/api/script_signlist.cpp +++ b/src/script/api/script_signlist.cpp @@ -16,8 +16,7 @@ ScriptSignList::ScriptSignList() { - Sign *s; - FOR_ALL_SIGNS(s) { + for (const Sign *s : Sign::Iterate()) { if (ScriptSign::IsValidSign(s->index)) this->AddItem(s->index); } } diff --git a/src/signs.cpp b/src/signs.cpp index c42644269a..f477ab7641 100644 --- a/src/signs.cpp +++ b/src/signs.cpp @@ -59,9 +59,7 @@ void Sign::UpdateVirtCoord() /** Update the coordinates of all signs */ void UpdateAllSignVirtCoords() { - Sign *si; - - FOR_ALL_SIGNS(si) { + for (Sign *si : Sign::Iterate()) { si->UpdateVirtCoord(); } } diff --git a/src/signs_base.h b/src/signs_base.h index e92a05e2f6..6cc7dc6d80 100644 --- a/src/signs_base.h +++ b/src/signs_base.h @@ -32,7 +32,4 @@ struct Sign : SignPool::PoolItem<&_sign_pool> { void UpdateVirtCoord(); }; -#define FOR_ALL_SIGNS_FROM(var, start) FOR_ALL_ITEMS_FROM(Sign, sign_index, var, start) -#define FOR_ALL_SIGNS(var) FOR_ALL_SIGNS_FROM(var, 0) - #endif /* SIGNS_BASE_H */ diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 9bd64b7d1b..ea3de70085 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -60,8 +60,7 @@ struct SignList { this->signs.clear(); - const Sign *si; - FOR_ALL_SIGNS(si) this->signs.push_back(si); + for (const Sign *si : Sign::Iterate()) this->signs.push_back(si); this->signs.SetFilterState(true); this->FilterSignList(); diff --git a/src/viewport.cpp b/src/viewport.cpp index 27bbdad517..fa590354b6 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2260,8 +2260,7 @@ void RebuildViewportKdtree() if (town->cache.sign.kdtree_valid) items.push_back(ViewportSignKdtreeItem::MakeTown(town->index)); } - const Sign *sign; - FOR_ALL_SIGNS(sign) { + for (const Sign *sign : Sign::Iterate()) { if (sign->sign.kdtree_valid) items.push_back(ViewportSignKdtreeItem::MakeSign(sign->index)); } From 847e5f33d4749568cda696b8940ec10b540bd6fb Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 21:21:33 +0100 Subject: [PATCH 27/84] Codechange: Replace story related FOR_ALL with range-based for loops --- src/economy.cpp | 3 +-- src/saveload/story_sl.cpp | 6 ++---- src/script/api/script_storypageelementlist.cpp | 3 +-- src/script/api/script_storypagelist.cpp | 3 +-- src/story.cpp | 6 ++---- src/story_base.h | 9 +-------- src/story_gui.cpp | 6 ++---- 7 files changed, 10 insertions(+), 26 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index b4a7d68093..47c73bd529 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -533,8 +533,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) ClearCargoPickupMonitoring(old_owner); ClearCargoDeliveryMonitoring(old_owner); - StoryPage *sp; - FOR_ALL_STORY_PAGES(sp) { + for (StoryPage *sp : StoryPage::Iterate()) { if (sp->company == old_owner) delete sp; } diff --git a/src/saveload/story_sl.cpp b/src/saveload/story_sl.cpp index 800cacbab4..dba2a064f5 100644 --- a/src/saveload/story_sl.cpp +++ b/src/saveload/story_sl.cpp @@ -39,8 +39,7 @@ static const SaveLoad _story_page_elements_desc[] = { static void Save_STORY_PAGE_ELEMENT() { - StoryPageElement *s; - FOR_ALL_STORY_PAGE_ELEMENTS(s) { + for (StoryPageElement *s : StoryPageElement::Iterate()) { SlSetArrayIndex(s->index); SlObject(s, _story_page_elements_desc); } @@ -75,8 +74,7 @@ static const SaveLoad _story_pages_desc[] = { static void Save_STORY_PAGE() { - StoryPage *s; - FOR_ALL_STORY_PAGES(s) { + for (StoryPage *s : StoryPage::Iterate()) { SlSetArrayIndex(s->index); SlObject(s, _story_pages_desc); } diff --git a/src/script/api/script_storypageelementlist.cpp b/src/script/api/script_storypageelementlist.cpp index 5df7dbf0ad..ce60963f24 100644 --- a/src/script/api/script_storypageelementlist.cpp +++ b/src/script/api/script_storypageelementlist.cpp @@ -17,8 +17,7 @@ ScriptStoryPageElementList::ScriptStoryPageElementList(ScriptStoryPage::StoryPag { if (!ScriptStoryPage::IsValidStoryPage(story_page_id)) return; - StoryPageElement *pe; - FOR_ALL_STORY_PAGE_ELEMENTS(pe) { + for (StoryPageElement *pe : StoryPageElement::Iterate()) { if (pe->page == story_page_id) { this->AddItem(pe->index); } diff --git a/src/script/api/script_storypagelist.cpp b/src/script/api/script_storypagelist.cpp index fc515472ac..63f835ada9 100644 --- a/src/script/api/script_storypagelist.cpp +++ b/src/script/api/script_storypagelist.cpp @@ -19,8 +19,7 @@ ScriptStoryPageList::ScriptStoryPageList(ScriptCompany::CompanyID company) uint8 c = company; if (company == ScriptCompany::COMPANY_INVALID) c = INVALID_COMPANY; - StoryPage *p; - FOR_ALL_STORY_PAGES(p) { + for (StoryPage *p : StoryPage::Iterate()) { if (p->company == c || p->company == INVALID_COMPANY) { this->AddItem(p->index); } diff --git a/src/story.cpp b/src/story.cpp index 86fd059dda..0d465fde85 100644 --- a/src/story.cpp +++ b/src/story.cpp @@ -157,8 +157,7 @@ CommandCost CmdCreateStoryPageElement(TileIndex tile, DoCommandFlag flags, uint3 /* Allow at most 128 elements per page. */ uint16 element_count = 0; - StoryPageElement *iter; - FOR_ALL_STORY_PAGE_ELEMENTS(iter) { + for (StoryPageElement *iter : StoryPageElement::Iterate()) { if (iter->page == page_id) element_count++; } if (element_count >= 128) return CMD_ERROR; @@ -317,8 +316,7 @@ CommandCost CmdRemoveStoryPage(TileIndex tile, DoCommandFlag flags, uint32 p1, u if (flags & DC_EXEC) { StoryPage *p = StoryPage::Get(page_id); - StoryPageElement *pe; - FOR_ALL_STORY_PAGE_ELEMENTS(pe) { + for (StoryPageElement *pe : StoryPageElement::Iterate()) { if (pe->page == p->index) { delete pe; } diff --git a/src/story_base.h b/src/story_base.h index 869a6b6a90..e82b9d6964 100644 --- a/src/story_base.h +++ b/src/story_base.h @@ -60,9 +60,6 @@ struct StoryPageElement : StoryPageElementPool::PoolItem<&_story_page_element_po inline ~StoryPageElement() { free(this->text); } }; -#define FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPageElement, story_page_element_index, var, start) -#define FOR_ALL_STORY_PAGE_ELEMENTS(var) FOR_ALL_STORY_PAGE_ELEMENTS_FROM(var, 0) - /** Struct about stories, current and completed */ struct StoryPage : StoryPagePool::PoolItem<&_story_page_pool> { uint32 sort_value; ///< A number that increases for every created story page. Used for sorting. The id of a story page is the pool index. @@ -82,8 +79,7 @@ struct StoryPage : StoryPagePool::PoolItem<&_story_page_pool> { inline ~StoryPage() { if (!this->CleaningPool()) { - StoryPageElement *spe; - FOR_ALL_STORY_PAGE_ELEMENTS(spe) { + for (StoryPageElement *spe : StoryPageElement::Iterate()) { if (spe->page == this->index) delete spe; } } @@ -91,8 +87,5 @@ struct StoryPage : StoryPagePool::PoolItem<&_story_page_pool> { } }; -#define FOR_ALL_STORY_PAGES_FROM(var, start) FOR_ALL_ITEMS_FROM(StoryPage, story_page_index, var, start) -#define FOR_ALL_STORY_PAGES(var) FOR_ALL_STORY_PAGES_FROM(var, 0) - #endif /* STORY_BASE_H */ diff --git a/src/story_gui.cpp b/src/story_gui.cpp index a14dab994a..677d88bba8 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -52,8 +52,7 @@ protected: if (this->story_pages.NeedRebuild()) { this->story_pages.clear(); - const StoryPage *p; - FOR_ALL_STORY_PAGES(p) { + for (const StoryPage *p : StoryPage::Iterate()) { if (this->IsPageAvailable(p)) { this->story_pages.push_back(p); } @@ -80,8 +79,7 @@ protected: const StoryPage *p = GetSelPage(); if (p != nullptr) { - const StoryPageElement *pe; - FOR_ALL_STORY_PAGE_ELEMENTS(pe) { + for (const StoryPageElement *pe : StoryPageElement::Iterate()) { if (pe->page == p->index) { this->story_page_elements.push_back(pe); } From 0b489f99249a8c62ee3826e490ed17f29377581c Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 21:22:15 +0100 Subject: [PATCH 28/84] Codechange: Replace FOR_ALL_SUBSIDIES with range-based for loops --- src/economy.cpp | 3 +-- src/saveload/afterload.cpp | 3 +-- src/saveload/subsidy_sl.cpp | 3 +-- src/script/api/script_subsidylist.cpp | 3 +-- src/subsidy.cpp | 18 ++++++------------ src/subsidy_base.h | 3 --- src/subsidy_gui.cpp | 13 +++++-------- 7 files changed, 15 insertions(+), 31 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 47c73bd529..49fcddf269 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -345,8 +345,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) Company::Get(old_owner)->money = UINT64_MAX >> 2; // jackpot ;p } - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (Subsidy *s : Subsidy::Iterate()) { if (s->awarded == old_owner) { if (new_owner == INVALID_OWNER) { delete s; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index f4e81b75bb..519e4d46e4 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2219,8 +2219,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_125)) { /* Convert old subsidies */ - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (Subsidy *s : Subsidy::Iterate()) { if (s->remaining < 12) { /* Converting nonawarded subsidy */ s->remaining = 12 - s->remaining; // convert "age" to "remaining" diff --git a/src/saveload/subsidy_sl.cpp b/src/saveload/subsidy_sl.cpp index 2ee3b4f95a..d0db78b61d 100644 --- a/src/saveload/subsidy_sl.cpp +++ b/src/saveload/subsidy_sl.cpp @@ -29,8 +29,7 @@ static const SaveLoad _subsidies_desc[] = { static void Save_SUBS() { - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (Subsidy *s : Subsidy::Iterate()) { SlSetArrayIndex(s->index); SlObject(s, _subsidies_desc); } diff --git a/src/script/api/script_subsidylist.cpp b/src/script/api/script_subsidylist.cpp index 600b6640c4..b92f1398c3 100644 --- a/src/script/api/script_subsidylist.cpp +++ b/src/script/api/script_subsidylist.cpp @@ -15,8 +15,7 @@ ScriptSubsidyList::ScriptSubsidyList() { - const Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { this->AddItem(s->index); } } diff --git a/src/subsidy.cpp b/src/subsidy.cpp index db436af257..32c8f0a1bc 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -135,8 +135,7 @@ void RebuildSubsidisedSourceAndDestinationCache() for (Industry *i : Industry::Iterate()) i->part_of_subsidy = POS_NONE; - const Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { SetPartOfSubsidyFlag(s->src_type, s->src, POS_SRC); SetPartOfSubsidyFlag(s->dst_type, s->dst, POS_DST); } @@ -151,8 +150,7 @@ void DeleteSubsidyWith(SourceType type, SourceID index) { bool dirty = false; - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (Subsidy *s : Subsidy::Iterate()) { if ((s->src_type == type && s->src == index) || (s->dst_type == type && s->dst == index)) { delete s; dirty = true; @@ -176,8 +174,7 @@ void DeleteSubsidyWith(SourceType type, SourceID index) */ static bool CheckSubsidyDuplicate(CargoID cargo, SourceType src_type, SourceID src, SourceType dst_type, SourceID dst) { - const Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { if (s->cargo_type == cargo && s->src_type == src_type && s->src == src && s->dst_type == dst_type && s->dst == dst) { @@ -471,8 +468,7 @@ void SubsidyMonthlyLoop() { bool modified = false; - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (Subsidy *s : Subsidy::Iterate()) { if (--s->remaining == 0) { if (!s->IsAwarded()) { Pair reftype = SetupSubsidyDecodeParam(s, true); @@ -564,8 +560,7 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, * which are destination of subsidised path. Do that only if needed */ std::vector towns_near; if (!st->rect.IsEmpty()) { - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { /* Don't create the cache if there is no applicable subsidy with town as destination */ if (s->dst_type != ST_TOWN) continue; if (s->cargo_type != cargo_type || s->src_type != src_type || s->src != src) continue; @@ -585,8 +580,7 @@ bool CheckSubsidised(CargoID cargo_type, CompanyID company, SourceType src_type, /* Check if there's a (new) subsidy that applies. There can be more subsidies triggered by this delivery! * Think about the case that subsidies are A->B and A->C and station has both B and C in its catchment area */ - Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (Subsidy *s : Subsidy::Iterate()) { if (s->cargo_type == cargo_type && s->src_type == src_type && s->src == src && (!s->IsAwarded() || s->awarded == company)) { switch (s->dst_type) { case ST_INDUSTRY: diff --git a/src/subsidy_base.h b/src/subsidy_base.h index 4f79339a90..ef26f64167 100644 --- a/src/subsidy_base.h +++ b/src/subsidy_base.h @@ -58,7 +58,4 @@ static const uint SUBSIDY_CARGO_MIN_POPULATION = 900; ///< Min. population of de static const uint SUBSIDY_MAX_PCT_TRANSPORTED = 42; ///< Subsidy will be created only for towns/industries with less % transported static const uint SUBSIDY_MAX_DISTANCE = 70; ///< Max. length of subsidised route (DistanceManhattan) -#define FOR_ALL_SUBSIDIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Subsidy, subsidy_index, var, start) -#define FOR_ALL_SUBSIDIES(var) FOR_ALL_SUBSIDIES_FROM(var, 0) - #endif /* SUBSIDY_BASE_H */ diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index 1a6b2ab4a7..f9a17f7b72 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -42,8 +42,7 @@ struct SubsidyListWindow : Window { int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SUL_PANEL, WD_FRAMERECT_TOP); int num = 0; - const Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { if (!s->IsAwarded()) { y--; if (y == 0) { @@ -62,7 +61,7 @@ struct SubsidyListWindow : Window { y -= 2; // "Services already subsidised:" if (y < 0) return; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { if (s->IsAwarded()) { y--; if (y == 0) { @@ -110,8 +109,7 @@ struct SubsidyListWindow : Window { /* Count number of (non) awarded subsidies */ uint num_awarded = 0; uint num_not_awarded = 0; - const Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { if (!s->IsAwarded()) { num_not_awarded++; } else { @@ -159,8 +157,7 @@ struct SubsidyListWindow : Window { pos++; uint num = 0; - const Subsidy *s; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { if (!s->IsAwarded()) { if (IsInsideMM(pos, 0, cap)) { /* Displays the two offered towns */ @@ -184,7 +181,7 @@ struct SubsidyListWindow : Window { pos++; num = 0; - FOR_ALL_SUBSIDIES(s) { + for (const Subsidy *s : Subsidy::Iterate()) { if (s->IsAwarded()) { if (IsInsideMM(pos, 0, cap)) { SetupSubsidyDecodeParam(s, true); From ee7a8eebca774666cd3625431a86dd05113b5e88 Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 22:04:09 +0100 Subject: [PATCH 29/84] Codechange: Replace FOR_ALL_TOWNS with range-based for loops --- src/economy.cpp | 4 +--- src/network/network_chat_gui.cpp | 4 +--- src/newgrf_house.cpp | 3 +-- src/openttd.cpp | 5 ++--- src/saveload/afterload.cpp | 33 +++++++++--------------------- src/saveload/oldloader_sl.cpp | 4 +--- src/saveload/town_sl.cpp | 14 +++++-------- src/script/api/script_townlist.cpp | 3 +-- src/smallmap_gui.cpp | 3 +-- src/station.cpp | 3 +-- src/station_cmd.cpp | 8 +++----- src/subsidy.cpp | 3 +-- src/town.h | 3 --- src/town_cmd.cpp | 25 +++++++--------------- src/town_gui.cpp | 6 ++---- src/townname.cpp | 3 +-- src/viewport.cpp | 3 +-- 17 files changed, 39 insertions(+), 88 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 49fcddf269..256e94d5cb 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -302,8 +302,6 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) assert(old_owner != _local_company); } - Town *t; - assert(old_owner != new_owner); { @@ -357,7 +355,7 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner) if (new_owner == INVALID_OWNER) RebuildSubsidisedSourceAndDestinationCache(); /* Take care of rating and transport rights in towns */ - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { /* If a company takes over, give the ratings to that company. */ if (new_owner != INVALID_OWNER) { if (HasBit(t->have_ratings, old_owner)) { diff --git a/src/network/network_chat_gui.cpp b/src/network/network_chat_gui.cpp index adaf6978c7..07348c0484 100644 --- a/src/network/network_chat_gui.cpp +++ b/src/network/network_chat_gui.cpp @@ -347,9 +347,7 @@ struct NetworkChatWindow : public Window { * Not that the following assumes all town indices are adjacent, ie no * towns have been deleted. */ if (*item < (uint)MAX_CLIENT_SLOTS + Town::GetPoolSize()) { - const Town *t; - - FOR_ALL_TOWNS_FROM(t, *item - MAX_CLIENT_SLOTS) { + for (const Town *t : Town::Iterate(*item - MAX_CLIENT_SLOTS)) { /* Get the town-name via the string-system */ SetDParam(0, t->index); GetString(chat_tab_temp_buffer, STR_TOWN_NAME, lastof(chat_tab_temp_buffer)); diff --git a/src/newgrf_house.cpp b/src/newgrf_house.cpp index 967b3cb83a..b7d8048c94 100644 --- a/src/newgrf_house.cpp +++ b/src/newgrf_house.cpp @@ -83,8 +83,7 @@ void InitializeBuildingCounts() { memset(&_building_counts, 0, sizeof(_building_counts)); - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { memset(&t->cache.building_counts, 0, sizeof(t->cache.building_counts)); } } diff --git a/src/openttd.cpp b/src/openttd.cpp index c7af56be1d..48d889aef4 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1188,8 +1188,7 @@ static void CheckCaches() /* Check the town caches. */ std::vector old_town_caches; - Town *t; - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { old_town_caches.push_back(t->cache); } @@ -1198,7 +1197,7 @@ static void CheckCaches() RebuildSubsidisedSourceAndDestinationCache(); uint i = 0; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { if (MemCmpT(old_town_caches.data() + i, &t->cache) != 0) { DEBUG(desync, 2, "town cache mismatch: town %i", (int)t->index); } diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 519e4d46e4..dd9fcd534f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -169,9 +169,7 @@ static void ConvertTownOwner() /* since savegame version 4.1, exclusive transport rights are stored at towns */ static void UpdateExclusiveRights() { - Town *t; - - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { t->exclusivity = INVALID_COMPANY; } @@ -270,8 +268,7 @@ static void InitializeWindowsAndCaches() s->airport.psa->tile = s->airport.tile; } } - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { for (std::list::iterator it = t->psa_list.begin(); it != t->psa_list.end(); ++it) { (*it)->feature = GSF_FAKE_TOWNS; (*it)->tile = t->xy; @@ -651,8 +648,7 @@ bool AfterLoadGame() if (st->name != nullptr) st->string_id = STR_SV_STNAME_FALLBACK; } - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { t->name = CopyFromOldName(t->townnametype); if (t->name != nullptr) t->townnametype = SPECSTR_TOWNNAME_START + _settings_game.game_creation.town_name; } @@ -980,8 +976,7 @@ bool AfterLoadGame() /* From version 9.0, we update the max passengers of a town (was sometimes negative * before that. */ if (IsSavegameVersionBefore(SLV_9)) { - Town *t; - FOR_ALL_TOWNS(t) UpdateTownMaxPass(t); + for (Town *t : Town::Iterate()) UpdateTownMaxPass(t); } /* From version 16.0, we included autorenew on engines, which are now saved, but @@ -1570,9 +1565,7 @@ bool AfterLoadGame() * fast was added in version 54. From version 56 this is now saved in the * town as cities can be built specifically in the scenario editor. */ if (IsSavegameVersionBefore(SLV_56)) { - Town *t; - - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { if (_settings_game.economy.larger_towns != 0 && (t->index % _settings_game.economy.larger_towns) == 0) { t->larger_town = true; } @@ -2018,8 +2011,7 @@ bool AfterLoadGame() if (e->company_avail == 0xFF) e->company_avail = 0xFFFF; } - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { if (t->have_ratings == 0xFF) t->have_ratings = 0xFFFF; for (uint i = 8; i != MAX_COMPANIES; i++) t->ratings[i] = RATING_INITIAL; } @@ -2108,8 +2100,7 @@ bool AfterLoadGame() /* Initialize layout of all towns. Older versions were using different * generator for random town layout, use it if needed. */ - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { if (_settings_game.economy.town_layout != TL_RANDOM) { t->layout = _settings_game.economy.town_layout; continue; @@ -2791,9 +2782,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_164)) FixupTrainLengths(); if (IsSavegameVersionBefore(SLV_165)) { - Town *t; - - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { /* Set the default cargo requirement for town growth */ switch (_settings_game.game_creation.landscape) { case LT_ARCTIC: @@ -2827,8 +2816,7 @@ bool AfterLoadGame() Town::Get(GetTownIndex(t))->cargo_accepted.Add(t); } - Town *town; - FOR_ALL_TOWNS(town) { + for (Town *town : Town::Iterate()) { UpdateTownCargoes(town); } } @@ -2984,8 +2972,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_198)) { /* Convert towns growth_rate and grow_counter to ticks */ - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { /* 0x8000 = TOWN_GROWTH_RATE_CUSTOM previously */ if (t->growth_rate & 0x8000) SetBit(t->flags, TOWN_CUSTOM_GROWTH); if (t->growth_rate != TOWN_GROWTH_RATE_NONE) { diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 830d300b68..659216c0c8 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -152,10 +152,8 @@ static uint32 RemapOldTownName(uint32 townnameparts, byte old_town_name_type) static void FixOldTowns() { - Town *town; - /* Convert town-names if needed */ - FOR_ALL_TOWNS(town) { + for (Town *town : Town::Iterate()) { if (IsInsideMM(town->townnametype, 0x20C1, 0x20C3)) { town->townnametype = SPECSTR_TOWNNAME_ENGLISH + _settings_game.game_creation.town_name; town->townnameparts = RemapOldTownName(town->townnameparts, _settings_game.game_creation.town_name); diff --git a/src/saveload/town_sl.cpp b/src/saveload/town_sl.cpp index 549a86cad6..6fe1439b4e 100644 --- a/src/saveload/town_sl.cpp +++ b/src/saveload/town_sl.cpp @@ -24,12 +24,11 @@ */ void RebuildTownCaches() { - Town *town; InitializeBuildingCounts(); RebuildTownKdtree(); /* Reset town population and num_houses */ - FOR_ALL_TOWNS(town) { + for (Town *town : Town::Iterate()) { town->cache.population = 0; town->cache.num_houses = 0; } @@ -38,7 +37,7 @@ void RebuildTownCaches() if (!IsTileType(t, MP_HOUSE)) continue; HouseID house_id = GetHouseType(t); - town = Town::GetByTile(t); + Town *town = Town::GetByTile(t); IncreaseBuildingCount(town, house_id); if (IsHouseCompleted(t)) town->cache.population += HouseSpec::Get(house_id)->population; @@ -47,7 +46,7 @@ void RebuildTownCaches() } /* Update the population and num_house dependent values */ - FOR_ALL_TOWNS(town) { + for (Town *town : Town::Iterate()) { UpdateTownRadius(town); UpdateTownCargoes(town); } @@ -263,9 +262,7 @@ static void RealSave_Town(Town *t) static void Save_TOWN() { - Town *t; - - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { SlSetArrayIndex(t->index); SlAutolength((AutolengthProc*)RealSave_Town, t); } @@ -311,8 +308,7 @@ static void Ptrs_TOWN() /* Don't run when savegame version lower than 161. */ if (IsSavegameVersionBefore(SLV_161)) return; - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { SlObject(t, _town_desc); } } diff --git a/src/script/api/script_townlist.cpp b/src/script/api/script_townlist.cpp index 8b544f29bd..b5af62b5f2 100644 --- a/src/script/api/script_townlist.cpp +++ b/src/script/api/script_townlist.cpp @@ -15,8 +15,7 @@ ScriptTownList::ScriptTownList() { - Town *t; - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { this->AddItem(t->index); } } diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index d8816265d8..00f682f635 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -914,8 +914,7 @@ void SmallMapWindow::DrawVehicles(const DrawPixelInfo *dpi, Blitter *blitter) co */ void SmallMapWindow::DrawTowns(const DrawPixelInfo *dpi) const { - const Town *t; - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { /* Remap the town coordinate */ Point pt = this->RemapTile(TileX(t->xy), TileY(t->xy)); int x = pt.x - this->subscroll - (t->cache.sign.width_small >> 1); diff --git a/src/station.cpp b/src/station.cpp index 3e00bdb149..61c53bc562 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -381,8 +381,7 @@ static void AddIndustryToDeliver(Industry *ind, Station *st) */ void Station::RemoveFromAllNearbyLists() { - Town *t; - FOR_ALL_TOWNS(t) { t->stations_near.erase(this); } + for (Town *t : Town::Iterate()) { t->stations_near.erase(this); } for (Industry *i : Industry::Iterate()) { i->stations_near.erase(this); } } diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 86b3aedaef..deed5161b8 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2185,10 +2185,10 @@ uint8 GetAirportNoiseLevelForDistance(const AirportSpec *as, uint distance) */ Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist) { - Town *t, *nearest = nullptr; + Town *nearest = nullptr; uint add = as->size_x + as->size_y - 2; // GetMinimalAirportDistanceToTile can differ from DistanceManhattan by this much mindist = UINT_MAX - add; // prevent overflow - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { if (DistanceManhattan(t->xy, it) < mindist + add) { // avoid calling GetMinimalAirportDistanceToTile too often TileIterator *copy = it.Clone(); uint dist = GetMinimalAirportDistanceToTile(*copy, t->xy); @@ -2207,9 +2207,7 @@ Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint /** Recalculate the noise generated by the airports of each town */ void UpdateAirportsNoise() { - Town *t; - - FOR_ALL_TOWNS(t) t->noise_reached = 0; + for (Town *t : Town::Iterate()) t->noise_reached = 0; for (const Station *st : Station::Iterate()) { if (st->airport.tile != INVALID_TILE && st->airport.type != AT_OILRIG) { diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 32c8f0a1bc..e3913a2891 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -130,8 +130,7 @@ static inline void SetPartOfSubsidyFlag(SourceType type, SourceID index, PartOfS /** Perform a full rebuild of the subsidies cache. */ void RebuildSubsidisedSourceAndDestinationCache() { - Town *t; - FOR_ALL_TOWNS(t) t->cache.part_of_subsidy = POS_NONE; + for (Town *t : Town::Iterate()) t->cache.part_of_subsidy = POS_NONE; for (Industry *i : Industry::Iterate()) i->part_of_subsidy = POS_NONE; diff --git a/src/town.h b/src/town.h index d07f9cc239..c8903d4ff3 100644 --- a/src/town.h +++ b/src/town.h @@ -185,9 +185,6 @@ TileIndexDiff GetHouseNorthPart(HouseID &house); Town *CalcClosestTownFromTile(TileIndex tile, uint threshold = UINT_MAX); -#define FOR_ALL_TOWNS_FROM(var, start) FOR_ALL_ITEMS_FROM(Town, town_index, var, start) -#define FOR_ALL_TOWNS(var) FOR_ALL_TOWNS_FROM(var, 0) - void ResetHouses(); void ClearTownHouse(Town *t, TileIndex tile); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 3fbf26e1d7..7b1d5c90ff 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -67,8 +67,7 @@ TownKdtree _town_kdtree(&Kdtree_TownXYFunc); void RebuildTownKdtree() { std::vector townids; - Town *town; - FOR_ALL_TOWNS(town) { + for (const Town *town : Town::Iterate()) { townids.push_back(town->index); } _town_kdtree.Build(townids.begin(), townids.end()); @@ -408,9 +407,7 @@ void Town::UpdateVirtCoord() /** Update the virtual coords needed to draw the town sign for all towns. */ void UpdateAllTownVirtCoords() { - Town *t; - - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { t->UpdateVirtCoord(); } } @@ -437,9 +434,7 @@ static void ChangePopulation(Town *t, int mod) uint32 GetWorldPopulation() { uint32 pop = 0; - const Town *t; - - FOR_ALL_TOWNS(t) pop += t->cache.population; + for (const Town *t : Town::Iterate()) pop += t->cache.population; return pop; } @@ -844,10 +839,9 @@ void UpdateTownCargoes(Town *t) /** Updates the bitmap of all cargoes accepted by houses. */ void UpdateTownCargoBitmap() { - Town *town; _town_cargoes_accepted = 0; - FOR_ALL_TOWNS(town) { + for (const Town *town : Town::Iterate()) { _town_cargoes_accepted |= town->cargo_accepted_total; } } @@ -874,8 +868,7 @@ void OnTick_Town() { if (_game_mode == GM_EDITOR) return; - Town *t; - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { TownTickHandler(t); } } @@ -1842,9 +1835,7 @@ static CommandCost TownCanBePlacedHere(TileIndex tile) */ static bool IsUniqueTownName(const char *name) { - const Town *t; - - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { if (t->name != nullptr && strcmp(t->name, name) == 0) return false; } @@ -3642,9 +3633,7 @@ CommandCost CheckforTownRating(DoCommandFlag flags, Town *t, TownRatingCheckType void TownsMonthlyLoop() { - Town *t; - - FOR_ALL_TOWNS(t) { + for (Town *t : Town::Iterate()) { if (t->road_build_months != 0) t->road_build_months--; if (t->exclusive_counter != 0) { diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 2f5a72a362..6320803794 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -689,8 +689,7 @@ private: if (this->towns.NeedRebuild()) { this->towns.clear(); - const Town *t; - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { this->towns.push_back(t); } @@ -991,8 +990,7 @@ public: } else { this->towns.clear(); - const Town *t; - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { this->string_filter.ResetState(); SetDParam(0, t->index); diff --git a/src/townname.cpp b/src/townname.cpp index ba59928444..5cc414794a 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -94,8 +94,7 @@ bool VerifyTownName(uint32 r, const TownNameParams *par, TownNames *town_names) if (town_names->find(buf1) != town_names->end()) return false; town_names->insert(buf1); } else { - const Town *t; - FOR_ALL_TOWNS(t) { + for (const Town *t : Town::Iterate()) { /* We can't just compare the numbers since * several numbers may map to a single name. */ const char *buf = t->name; diff --git a/src/viewport.cpp b/src/viewport.cpp index fa590354b6..06f5023795 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2255,8 +2255,7 @@ void RebuildViewportKdtree() if (wp->sign.kdtree_valid) items.push_back(ViewportSignKdtreeItem::MakeWaypoint(wp->index)); } - const Town *town; - FOR_ALL_TOWNS(town) { + for (const Town *town : Town::Iterate()) { if (town->cache.sign.kdtree_valid) items.push_back(ViewportSignKdtreeItem::MakeTown(town->index)); } From ae532008ff3bc4195989e5c0ab2a9733473360ac Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 17 Dec 2019 22:24:26 +0100 Subject: [PATCH 30/84] Cleanup: remove FOR_ALL_ITEMS --- src/core/pool_type.hpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 565f1500e5..0dba9a0b41 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -363,10 +363,4 @@ private: void FreeItem(size_t index); }; -#define FOR_ALL_ITEMS_FROM(type, iter, var, start) \ - for (size_t iter = start; var = nullptr, iter < type::GetPoolSize(); iter++) \ - if ((var = type::Get(iter)) != nullptr) - -#define FOR_ALL_ITEMS(type, iter, var) FOR_ALL_ITEMS_FROM(type, iter, var, 0) - #endif /* POOL_TYPE_HPP */ From e3c75a30bac6837c0a525aa58d2b966eb232650f Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 18 Dec 2019 18:21:23 +0100 Subject: [PATCH 31/84] Fix: unused variable warnings --- src/core/pool_type.hpp | 4 +++- src/network/network.cpp | 4 +--- src/road_cmd.cpp | 4 +--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/core/pool_type.hpp b/src/core/pool_type.hpp index 0dba9a0b41..035607a8fb 100644 --- a/src/core/pool_type.hpp +++ b/src/core/pool_type.hpp @@ -155,7 +155,8 @@ struct Pool : PoolBase { this->ValidateIndex(); }; - bool operator!=(const PoolIterator &other) const { return this->index != other.index; } + bool operator==(const PoolIterator &other) const { return this->index == other.index; } + bool operator!=(const PoolIterator &other) const { return !(*this == other); } T * operator*() const { return T::Get(this->index); } PoolIterator & operator++() { this->index++; this->ValidateIndex(); return *this; } @@ -176,6 +177,7 @@ struct Pool : PoolBase { IterateWrapper(size_t from = 0, std::function filter = nullptr) : from(from), filter(filter) {} PoolIterator begin() { return PoolIterator(this->from, this->filter); } PoolIterator end() { return PoolIterator(T::GetPoolSize()); } + bool empty() { return this->begin() == this->end(); } }; /** diff --git a/src/network/network.cpp b/src/network/network.cpp index a27aa224a6..fe7e6a8552 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -99,9 +99,7 @@ extern void StateGameLoop(); */ bool HasClients() { - for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) return true; - - return false; + return !NetworkClientSocket::Iterate().empty(); } /** diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 8126a06d35..ae328a0652 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -182,9 +182,7 @@ RoadType AllocateRoadType(RoadTypeLabel label, RoadTramType rtt) */ bool RoadVehiclesAreBuilt() { - for (const RoadVehicle *rv : RoadVehicle::Iterate()) return true; - - return false; + return !RoadVehicle::Iterate().empty(); } /** From faaec445d669a222718c2634eb059c44c00a43b7 Mon Sep 17 00:00:00 2001 From: glx Date: Sat, 14 Dec 2019 19:08:30 +0100 Subject: [PATCH 32/84] Fix: [MinGW] undefined references when _FORTIFY_SOURCE > 0 --- config.lib | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/config.lib b/config.lib index a7df135769..df3b23fed1 100644 --- a/config.lib +++ b/config.lib @@ -1516,12 +1516,20 @@ make_cflags_and_ldflags() { # extensions in a way that breaks build with at least ICC. # This requires -O1 or more, so debug level 3 (-O0) is excluded. CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" + if [ "$os" = "MINGW" ]; then + # Prevent undefined references when _FORTIFY_SOURCE > 0 + LDFLAGS="$LDFLAGS -fstack-protector" + fi fi cc_build_is_gcc=`basename "$cc_build" | grep "gcc" 2>/dev/null` if [ -n "$cc_build_is_gcc" ]; then # Just add -O1 to the tools needed for building. CFLAGS_BUILD="$CFLAGS_BUILD -D_FORTIFY_SOURCE=2 -O1" + if [ "$os" = "MINGW" ]; then + # Prevent undefined references when _FORTIFY_SOURCE > 0 + LDFLAGS_BUILD="$LDFLAGS_BUILD -fstack-protector" + fi fi fi From b0d443d5250b15cbdb3be917ab66a44125840b44 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 22 Dec 2019 19:45:40 +0100 Subject: [PATCH 33/84] Update: Translations from eints korean: 1 change by telk5093 --- src/lang/korean.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index bb993f9c13..d825a1784f 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4610,7 +4610,7 @@ STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... 경 STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}경로를 공유할 수 없습니다... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}경로 공유를 중단할 수 없습니다... STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}경로를 복사할 수 없습니다... -STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... 이전의 목적지로부터 너무 멉니다 +STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... 이전 목적지에서 너무 멀리 떨어져 있습니다 STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... 항공기의 항속거리가 충분하지 않습니다. # Timetable related errors From e5dd19b0de54fe3500a7ea524bf53a7fec1cdc5a Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: [PATCH 34/84] Cleanup: Properties 12 and 15 do not exist for road/tramtypes. --- src/newgrf.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index a6a48b1ca1..19086e3768 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -4553,8 +4553,6 @@ static ChangeInfoResult RoadTypeReserveInfo(uint id, int numinfo, int prop, Byte break; case 0x10: // Road Type flags - case 0x12: // Station graphic - case 0x15: // Acceleration model case 0x16: // Map colour case 0x1A: // Sort order buf->ReadByte(); From bc7f92815bf5e34bb1919d75a905211828e49645 Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: [PATCH 35/84] Cleanup: Remove unused constants. The value of the tram constant was also incorrect. --- src/road_type.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/road_type.h b/src/road_type.h index 95a8834ffe..969b141ba2 100644 --- a/src/road_type.h +++ b/src/road_type.h @@ -14,9 +14,6 @@ typedef uint32 RoadTypeLabel; -static const RoadTypeLabel ROADTYPE_ROAD_LABEL = 'ROAD'; -static const RoadTypeLabel ROADTYPE_TRAM_LABEL = 'TRAM'; - /** * The different roadtypes we support * From 7f351fd7c1e853918d2ce7bfd1c9c6c5a2af84ef Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: [PATCH 36/84] Fix: Action7/9 conditions 0F..12 reported roadtypes as valid tramtypes and vice versa. --- src/newgrf.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 19086e3768..f4197c9aa9 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6622,15 +6622,26 @@ static void SkipIf(ByteReader *buf) break; case 0x0E: result = GetRailTypeByLabel(BSWAP32(cond_val)) != INVALID_RAILTYPE; break; - case 0x0F: result = GetRoadTypeByLabel(BSWAP32(cond_val)) == INVALID_ROADTYPE; + case 0x0F: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt == INVALID_ROADTYPE || !RoadTypeIsRoad(rt); break; - case 0x10: result = GetRoadTypeByLabel(BSWAP32(cond_val)) != INVALID_ROADTYPE; + } + case 0x10: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt != INVALID_ROADTYPE && RoadTypeIsRoad(rt); break; - case 0x11: result = GetRoadTypeByLabel(BSWAP32(cond_val)) == INVALID_ROADTYPE; + } + case 0x11: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt == INVALID_ROADTYPE || !RoadTypeIsTram(rt); break; - case 0x12: result = GetRoadTypeByLabel(BSWAP32(cond_val)) != INVALID_ROADTYPE; + } + case 0x12: { + RoadType rt = GetRoadTypeByLabel(BSWAP32(cond_val)); + result = rt != INVALID_ROADTYPE && RoadTypeIsTram(rt); break; - + } default: grfmsg(1, "SkipIf: Unsupported condition type %02X. Ignoring", condtype); return; } } From 3d29c9483b180791f3d5b5f9a6664fc1322d4f52 Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: [PATCH 37/84] Codechange: Use a switch with fall-through instead of a if-sequence with context data between cases. --- src/rail_gui.cpp | 46 +++++++++++++++++++++++++--------------------- src/rail_type.h | 4 ---- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 2cf2f38e48..cd0d93c8fb 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1908,38 +1908,42 @@ static void SetDefaultRailGui() if (_local_company == COMPANY_SPECTATOR || !Company::IsValidID(_local_company)) return; extern RailType _last_built_railtype; - RailType rt = (RailType)(_settings_client.gui.default_rail_type + RAILTYPE_END); - if (rt == DEF_RAILTYPE_MOST_USED) { - /* Find the most used rail type */ - uint count[RAILTYPE_END]; - memset(count, 0, sizeof(count)); - for (TileIndex t = 0; t < MapSize(); t++) { - if (IsTileType(t, MP_RAILWAY) || IsLevelCrossingTile(t) || HasStationTileRail(t) || - (IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL)) { - count[GetRailType(t)]++; + RailType rt; + switch (_settings_client.gui.default_rail_type) { + case 2: { + /* Find the most used rail type */ + uint count[RAILTYPE_END]; + memset(count, 0, sizeof(count)); + for (TileIndex t = 0; t < MapSize(); t++) { + if (IsTileType(t, MP_RAILWAY) || IsLevelCrossingTile(t) || HasStationTileRail(t) || + (IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL)) { + count[GetRailType(t)]++; + } } - } - rt = RAILTYPE_RAIL; - for (RailType r = RAILTYPE_ELECTRIC; r < RAILTYPE_END; r++) { - if (count[r] >= count[rt]) rt = r; - } + rt = RAILTYPE_RAIL; + for (RailType r = RAILTYPE_ELECTRIC; r < RAILTYPE_END; r++) { + if (count[r] >= count[rt]) rt = r; + } - /* No rail, just get the first available one */ - if (count[rt] == 0) rt = DEF_RAILTYPE_FIRST; - } - switch (rt) { - case DEF_RAILTYPE_FIRST: + if (count[rt] > 0) break; + + /* No rail, just get the first available one */ + FALLTHROUGH; + } + case 0: + /* Use first available type */ rt = RAILTYPE_RAIL; while (rt < RAILTYPE_END && !HasRailtypeAvail(_local_company, rt)) rt++; break; - case DEF_RAILTYPE_LAST: + case 1: + /* Use last available type */ rt = GetBestRailtype(_local_company); break; default: - break; + NOT_REACHED(); } _last_built_railtype = _cur_railtype = rt; diff --git a/src/rail_type.h b/src/rail_type.h index be30ffd6fa..874a8ebbb6 100644 --- a/src/rail_type.h +++ b/src/rail_type.h @@ -32,10 +32,6 @@ enum RailType : byte { RAILTYPE_MAGLEV = 3, ///< Maglev RAILTYPE_END = 64, ///< Used for iterations INVALID_RAILTYPE = 0xFF, ///< Flag for invalid railtype - - DEF_RAILTYPE_FIRST = RAILTYPE_END, ///< Default railtype: first available - DEF_RAILTYPE_LAST, ///< Default railtype: last available - DEF_RAILTYPE_MOST_USED, ///< Default railtype: most used }; /** Allow incrementing of Track variables */ From 6fa217dfc8afbd06bbc46462a2b6affc35268b5b Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: [PATCH 38/84] Codechange: Use RAILTYPE_BEGIN instead of RAILTYPE_RAIL when the intention is iteration. --- src/rail_gui.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index cd0d93c8fb..7917268a13 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1921,11 +1921,7 @@ static void SetDefaultRailGui() } } - rt = RAILTYPE_RAIL; - for (RailType r = RAILTYPE_ELECTRIC; r < RAILTYPE_END; r++) { - if (count[r] >= count[rt]) rt = r; - } - + rt = static_cast(std::max_element(count + RAILTYPE_BEGIN, count + RAILTYPE_END) - count); if (count[rt] > 0) break; /* No rail, just get the first available one */ @@ -1933,7 +1929,7 @@ static void SetDefaultRailGui() } case 0: /* Use first available type */ - rt = RAILTYPE_RAIL; + rt = RAILTYPE_BEGIN; while (rt < RAILTYPE_END && !HasRailtypeAvail(_local_company, rt)) rt++; break; From b769eb30c43ccbc4e60b8b7df024253ac55d2265 Mon Sep 17 00:00:00 2001 From: frosch Date: Wed, 18 Dec 2019 00:48:03 +0100 Subject: [PATCH 39/84] Fix: Setting the default railtype to 'first/last available' did not work with NewGRF defined railtypes. --- src/rail.cpp | 15 --------------- src/rail.h | 1 - src/rail_gui.cpp | 17 ++++++++++------- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/rail.cpp b/src/rail.cpp index f3c2c3dcce..63afa379e0 100644 --- a/src/rail.cpp +++ b/src/rail.cpp @@ -208,21 +208,6 @@ bool ValParamRailtype(const RailType rail) return rail < RAILTYPE_END && HasRailtypeAvail(_current_company, rail); } -/** - * Returns the "best" railtype a company can build. - * As the AI doesn't know what the BEST one is, we have our own priority list - * here. When adding new railtypes, modify this function - * @param company the company "in action" - * @return The "best" railtype a company has available - */ -RailType GetBestRailtype(const CompanyID company) -{ - if (HasRailtypeAvail(company, RAILTYPE_MAGLEV)) return RAILTYPE_MAGLEV; - if (HasRailtypeAvail(company, RAILTYPE_MONO)) return RAILTYPE_MONO; - if (HasRailtypeAvail(company, RAILTYPE_ELECTRIC)) return RAILTYPE_ELECTRIC; - return RAILTYPE_RAIL; -} - /** * Add the rail types that are to be introduced at the given date. * @param current The currently available railtypes. diff --git a/src/rail.h b/src/rail.h index ff073cfc21..d9121d545a 100644 --- a/src/rail.h +++ b/src/rail.h @@ -452,7 +452,6 @@ bool ValParamRailtype(const RailType rail); RailTypes AddDateIntroducedRailTypes(RailTypes current, Date date); -RailType GetBestRailtype(const CompanyID company); RailTypes GetCompanyRailtypes(CompanyID company, bool introduces = true); RailTypes GetRailTypes(bool introduces); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 7917268a13..c0a3f44574 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1927,17 +1927,20 @@ static void SetDefaultRailGui() /* No rail, just get the first available one */ FALLTHROUGH; } - case 0: + case 0: { /* Use first available type */ - rt = RAILTYPE_BEGIN; - while (rt < RAILTYPE_END && !HasRailtypeAvail(_local_company, rt)) rt++; + std::vector::const_iterator it = std::find_if(_sorted_railtypes.begin(), _sorted_railtypes.end(), + [](RailType r){ return HasRailtypeAvail(_local_company, r); }); + rt = it != _sorted_railtypes.end() ? *it : RAILTYPE_BEGIN; break; - - case 1: + } + case 1: { /* Use last available type */ - rt = GetBestRailtype(_local_company); + std::vector::const_reverse_iterator it = std::find_if(_sorted_railtypes.rbegin(), _sorted_railtypes.rend(), + [](RailType r){ return HasRailtypeAvail(_local_company, r); }); + rt = it != _sorted_railtypes.rend() ? *it : RAILTYPE_BEGIN; break; - + } default: NOT_REACHED(); } From 42144ecd562ee05423e16452cc999929296b138c Mon Sep 17 00:00:00 2001 From: glx Date: Tue, 26 Nov 2019 01:28:03 +0100 Subject: [PATCH 40/84] Add: a TextColour flag to ignore colour changes from strings --- src/gfx.cpp | 2 +- src/gfx_layout.h | 2 +- src/gfx_type.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gfx.cpp b/src/gfx.cpp index 478acc1f27..db024c9c75 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -316,7 +316,7 @@ static void SetColourRemap(TextColour colour) * would be invisible at best, but it actually makes it illegible. */ bool no_shade = (colour & TC_NO_SHADE) != 0 || colour == TC_BLACK; bool raw_colour = (colour & TC_IS_PALETTE_COLOUR) != 0; - colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR); + colour &= ~(TC_NO_SHADE | TC_IS_PALETTE_COLOUR | TC_FORCED); _string_colourremap[1] = raw_colour ? (byte)colour : _string_colourmap[colour]; _string_colourremap[2] = no_shade ? 0 : 1; diff --git a/src/gfx_layout.h b/src/gfx_layout.h index c8f5635916..4854be6e55 100644 --- a/src/gfx_layout.h +++ b/src/gfx_layout.h @@ -46,7 +46,7 @@ struct FontState { inline void SetColour(TextColour c) { assert(c >= TC_BLUE && c <= TC_BLACK); - this->cur_colour = c; + if ((this->cur_colour & TC_FORCED) == 0) this->cur_colour = c; } /** diff --git a/src/gfx_type.h b/src/gfx_type.h index 1dac6729b7..6fca2228df 100644 --- a/src/gfx_type.h +++ b/src/gfx_type.h @@ -267,6 +267,7 @@ enum TextColour { TC_IS_PALETTE_COLOUR = 0x100, ///< Colour value is already a real palette colour index, not an index of a StringColour. TC_NO_SHADE = 0x200, ///< Do not add shading to this text colour. + TC_FORCED = 0x400, ///< Ignore colour changes from strings. }; DECLARE_ENUM_AS_BIT_SET(TextColour) From 551bde77a49878a984c04c47c280c9681292c84f Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Fri, 10 May 2019 18:24:16 +0200 Subject: [PATCH 41/84] Add: A function which selects and scrolls to a particular group in the vehicle group window. --- src/group_gui.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 256c85ba4f..a4c00c1290 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -368,6 +368,7 @@ public: this->groups.ForceRebuild(); this->groups.NeedResort(); this->BuildGroupList(vli.company); + this->group_sb->SetCount((uint)this->groups.size()); this->GetWidget(WID_GL_CAPTION)->widget_data = STR_VEHICLE_LIST_TRAIN_CAPTION + this->vli.vtype; this->GetWidget(WID_GL_LIST_VEHICLE)->tool_tip = STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP + this->vli.vtype; @@ -991,6 +992,35 @@ public: { if (this->vehicle_sel == vehicle) ResetObjectToPlace(); } + + /** + * Selects the specified group in the list + * + * @param g_id The ID of the group to be selected + */ + void SelectGroup(const GroupID g_id) + { + if (g_id == INVALID_GROUP || g_id == this->vli.index) return; + + this->vli.index = g_id; + if (g_id != ALL_GROUP && g_id != DEFAULT_GROUP) { + const Group *g = Group::Get(g_id); + int id_g = find_index(this->groups, g); + // The group's branch is maybe collapsed, so try to expand it + if (id_g == -1) { + for (auto pg = Group::GetIfValid(g->parent); pg != nullptr; pg = Group::GetIfValid(pg->parent)) { + pg->folded = false; + } + this->groups.ForceRebuild(); + this->BuildGroupList(this->owner); + id_g = find_index(this->groups, g); + } + this->group_sb->ScrollTowards(id_g); + } + this->vehicles.ForceRebuild(); + this->SetDirty(); + } + }; From a363933d0899f6e79bf04eb38097ce1170f02bee Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Fri, 10 May 2019 19:33:59 +0200 Subject: [PATCH 42/84] Feature: Control + click on a vehicle in the vehicle group window selects and scrolls to the vehicle's group. --- src/group_gui.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index a4c00c1290..8d7c042d2e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -734,6 +734,10 @@ public: this->vehicle_sel = v->index; + if (_ctrl_pressed) { + this->SelectGroup(v->group_id); + } + SetObjectToPlaceWnd(SPR_CURSOR_MOUSE, PAL_NONE, HT_DRAG, this); SetMouseCursorVehicle(v, EIT_IN_LIST); _cursor.vehchain = true; From cc1d72c3a370f3c9a13e8722f8d69f5735b95285 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Fri, 10 May 2019 19:49:50 +0200 Subject: [PATCH 43/84] Feature: Control + click on the vehicle details button in the vehicle view window opens the vehicle group window, then selects and scrolls to the vehicle's group. --- src/group_gui.cpp | 21 +++++++++++++++++---- src/group_gui.h | 3 ++- src/vehicle_gui.cpp | 6 +++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 8d7c042d2e..842e3fbb0e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1046,18 +1046,31 @@ static WindowDesc _train_group_desc( * Show the group window for the given company and vehicle type. * @param company The company to show the window for. * @param vehicle_type The type of vehicle to show it for. + * @param group The group to be selected. Defaults to INVALID_GROUP. + * @param need_existing_window Whether the existing window is needed. Defaults to false. */ -void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type) +void ShowCompanyGroup(CompanyID company, VehicleType vehicle_type, GroupID group = INVALID_GROUP, bool need_existing_window = false) { if (!Company::IsValidID(company)) return; - WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack(); + const WindowNumber num = VehicleListIdentifier(VL_GROUP_LIST, vehicle_type, company).Pack(); + VehicleGroupWindow *w; if (vehicle_type == VEH_TRAIN) { - AllocateWindowDescFront(&_train_group_desc, num); + w = AllocateWindowDescFront(&_train_group_desc, num, need_existing_window); } else { _other_group_desc.cls = GetWindowClassForVehicleType(vehicle_type); - AllocateWindowDescFront(&_other_group_desc, num); + w = AllocateWindowDescFront(&_other_group_desc, num, need_existing_window); } + if (w != nullptr) w->SelectGroup(group); +} + +/** + * Show the group window for the given vehicle. + * @param v The vehicle to show the window for. + */ +void ShowCompanyGroupForVehicle(const Vehicle *v) +{ + ShowCompanyGroup(v->owner, v->type, v->group_id, true); } /** diff --git a/src/group_gui.h b/src/group_gui.h index 6a0ddfb7a7..d42704663e 100644 --- a/src/group_gui.h +++ b/src/group_gui.h @@ -13,7 +13,8 @@ #include "company_type.h" #include "vehicle_type.h" -void ShowCompanyGroup(CompanyID company, VehicleType veh); +void ShowCompanyGroup(CompanyID company, VehicleType veh, GroupID group = INVALID_GROUP, bool need_existing_window = false); +void ShowCompanyGroupForVehicle(const Vehicle *v); void DeleteGroupHighlightOfVehicle(const Vehicle *v); #endif /* GROUP_GUI_H */ diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 04d240b04a..6272459bc2 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2698,7 +2698,11 @@ public: } break; case WID_VV_SHOW_DETAILS: // show details - ShowVehicleDetailsWindow(v); + if (_ctrl_pressed) { + ShowCompanyGroupForVehicle(v); + } else { + ShowVehicleDetailsWindow(v); + } break; case WID_VV_CLONE: // clone vehicle /* Suppress the vehicle GUI when share-cloning. From 798e9ee93e1189586d72201abab7caccc3fb6bdc Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Mon, 22 Jul 2019 22:16:41 +0200 Subject: [PATCH 44/84] Feature: Add a button to the vehicle advisory news window to open the group window. --- src/lang/english.txt | 2 ++ src/news_gui.cpp | 49 ++++++++++++++++++++++++++ src/script/api/game/game_window.hpp.sq | 1 + src/script/api/script_window.hpp | 1 + src/widgets/news_widget.h | 1 + 5 files changed, 54 insertions(+) diff --git a/src/lang/english.txt b/src/lang/english.txt index 7c59faa54d..bc89cfee3d 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -870,6 +870,8 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Open the group window focused on the vehicle's group + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING} diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 6fd6ca38a9..f963a876a4 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -16,6 +16,7 @@ #include "vehicle_base.h" #include "vehicle_func.h" #include "vehicle_gui.h" +#include "roadveh.h" #include "station_base.h" #include "industry.h" #include "town.h" @@ -32,6 +33,7 @@ #include "company_base.h" #include "settings_internal.h" #include "guitimer_func.h" +#include "group_gui.h" #include "widgets/news_widget.h" @@ -181,6 +183,8 @@ static const NWidgetPart _nested_small_news_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_LIGHT_BLUE, WID_N_CLOSEBOX), NWidget(WWT_EMPTY, COLOUR_LIGHT_BLUE, WID_N_CAPTION), SetFill(1, 0), + NWidget(WWT_TEXTBTN, COLOUR_LIGHT_BLUE, WID_N_SHOW_GROUP), SetMinimalSize(14, 11), SetResize(1, 0), + SetDataTip(STR_NULL /* filled in later */, STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP), EndContainer(), /* Main part */ @@ -279,6 +283,27 @@ struct NewsWindow : Window { /* For company news with a face we have a separate headline in param[0] */ if (desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = this->ni->params[0]; + NWidgetCore *nwid = this->GetWidget(WID_N_SHOW_GROUP); + if (ni->reftype1 == NR_VEHICLE && nwid != nullptr) { + const Vehicle *v = Vehicle::Get(ni->ref1); + switch (v->type) { + case VEH_TRAIN: + nwid->widget_data = STR_TRAIN; + break; + case VEH_ROAD: + nwid->widget_data = RoadVehicle::From(v)->IsBus() ? STR_BUS : STR_LORRY; + break; + case VEH_SHIP: + nwid->widget_data = STR_SHIP; + break; + case VEH_AIRCRAFT: + nwid->widget_data = STR_PLANE; + break; + default: + break; // Do nothing + } + } + this->FinishInitNested(0); /* Initialize viewport if it exists. */ @@ -354,6 +379,24 @@ struct NewsWindow : Window { str = GetEngineInfoString(engine); break; } + + case WID_N_SHOW_GROUP: + if (this->ni->reftype1 == NR_VEHICLE) { + Dimension d2 = GetStringBoundingBox(this->GetWidget(WID_N_SHOW_GROUP)->widget_data); + d2.height += WD_CAPTIONTEXT_TOP + WD_CAPTIONTEXT_BOTTOM; + d2.width += WD_CAPTIONTEXT_LEFT + WD_CAPTIONTEXT_RIGHT; + *size = d2; + } else { + /* Hide 'Show group window' button if this news is not about a vehicle. */ + size->width = 0; + size->height = 0; + resize->width = 0; + resize->height = 0; + fill->width = 0; + fill->height = 0; + } + return; + default: return; // Do nothing } @@ -449,6 +492,12 @@ struct NewsWindow : Window { case WID_N_VIEWPORT: break; // Ignore clicks + case WID_N_SHOW_GROUP: + if (this->ni->reftype1 == NR_VEHICLE) { + const Vehicle *v = Vehicle::Get(this->ni->ref1); + ShowCompanyGroupForVehicle(v); + } + break; default: if (this->ni->reftype1 == NR_VEHICLE) { const Vehicle *v = Vehicle::Get(this->ni->ref1); diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index 7eca5023f1..be89676047 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -870,6 +870,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_VEH_NAME, "WID_N_VEH_NAME"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_VEH_SPR, "WID_N_VEH_SPR"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_VEH_INFO, "WID_N_VEH_INFO"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_N_SHOW_GROUP, "WID_N_SHOW_GROUP"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MH_STICKYBOX, "WID_MH_STICKYBOX"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MH_BACKGROUND, "WID_MH_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_MH_SCROLLBAR, "WID_MH_SCROLLBAR"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 71647ee5be..4efcc5bb6b 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1940,6 +1940,7 @@ public: WID_N_VEH_NAME = ::WID_N_VEH_NAME, ///< Name of the new vehicle. WID_N_VEH_SPR = ::WID_N_VEH_SPR, ///< Graphical display of the new vehicle. WID_N_VEH_INFO = ::WID_N_VEH_INFO, ///< Some technical data of the new vehicle. + WID_N_SHOW_GROUP = ::WID_N_SHOW_GROUP, ///< Show vehicle's group }; /** Widgets of the #MessageHistoryWindow class. */ diff --git a/src/widgets/news_widget.h b/src/widgets/news_widget.h index 23a66c8af0..e5b8934439 100644 --- a/src/widgets/news_widget.h +++ b/src/widgets/news_widget.h @@ -31,6 +31,7 @@ enum NewsWidgets { WID_N_VEH_NAME, ///< Name of the new vehicle. WID_N_VEH_SPR, ///< Graphical display of the new vehicle. WID_N_VEH_INFO, ///< Some technical data of the new vehicle. + WID_N_SHOW_GROUP, ///< Show vehicle's group }; /** Widgets of the #MessageHistoryWindow class. */ From fea5151ee1ec26a96034c4b34ffe2c7ae783299a Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Wed, 23 Oct 2019 23:48:20 +0200 Subject: [PATCH 45/84] Feature: Control + clicking on a vehicle in the vehicle list window opens the vehicle group window focused on the vehicle's group. --- src/vehicle_gui.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 6272459bc2..bd38ea26ad 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1625,7 +1625,13 @@ public: if (id_v >= this->vehicles.size()) return; // click out of list bound const Vehicle *v = this->vehicles[id_v]; - if (!VehicleClicked(v)) ShowVehicleViewWindow(v); + if (!VehicleClicked(v)) { + if (_ctrl_pressed) { + ShowCompanyGroupForVehicle(v); + } else { + ShowVehicleViewWindow(v); + } + } break; } From dbe44e80f1c0879f6aa829e28f1c764f72d5f650 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 23 Dec 2019 19:45:40 +0100 Subject: [PATCH 46/84] Update: Translations from eints --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 1 + src/lang/french.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 1 + src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/malay.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/unfinished/chuvash.txt | 1 + src/lang/unfinished/frisian.txt | 1 + src/lang/unfinished/ido.txt | 1 + src/lang/unfinished/macedonian.txt | 1 + src/lang/unfinished/maltese.txt | 1 + src/lang/unfinished/marathi.txt | 1 + src/lang/unfinished/persian.txt | 1 + src/lang/unfinished/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 63 files changed, 63 insertions(+) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 0179d1a6a3..bf30bdc8ad 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -857,6 +857,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuwe {STRING} nou beskikbaar! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} aanvaar nie meer {STRING} nie STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} aanvaar nie meer {STRING} of {STRING} nie STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} aanvaar nou {STRING} diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 9c9438749e..b49778ae1b 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -825,6 +825,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}جديد {STRING} الآن متاح ! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} لم تعد تقبل {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}لم تعد تقبل {STRING} او {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} الآن تقبل {STRING} diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 4046062486..4f817e8052 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -846,6 +846,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} berri bat orain erabilgarri! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ez du gehiago {STRING} onartzen STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ez du gehiago {STRING} edo {STRING} onartzen STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} orain {STRING} onartzen du diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index ab88f77f1d..8293e9f999 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -1173,6 +1173,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}З'явіўся новы {STRING}! — {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} больш не прымае {STRING.acc} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} больш не прымае {STRING.acc} ды {STRING.acc} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} цяпер прымае {STRING.acc} diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 0907f98deb..9ab5e03feb 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -863,6 +863,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G o a} {STRING} já está disponível! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} não aceita mais {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} não aceita mais {STRING} ou {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} agora aceita {STRING} diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 4271de8641..ed3ef49fee 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -854,6 +854,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов {STRING} е на разположение! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} вече не приема {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} вече не приема {STRING} или {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} вече приема {STRING} diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 16644e3aa9..fb3346e0ea 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -866,6 +866,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}No{G u va} {STRING} disponible! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ja no accepta més {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ja no accepta més {STRING} ni {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ara accepta {STRING} diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index cbe43eb049..3e099abba1 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -966,6 +966,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novi {STRING} je sada dostupan! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} više ne prihvaća {STRING.aku} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} više ne prihvaća {STRING.aku} ili {STRING.aku} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} od sada prihvaća {STRING.aku} diff --git a/src/lang/czech.txt b/src/lang/czech.txt index 421c88c37f..b42c0a84aa 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -957,6 +957,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G ý á é í é é á} {STRING} k dispozici! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} už dále nepřijímá {STRING.acc} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} už dále nepřijímá {STRING.acc} ani {STRING.acc} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nyní přijímá {STRING.acc} diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 028ddd41d9..4256899e4f 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -866,6 +866,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} er nu tilgængelig! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} accepterer ikke længere {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} accepterer ikke længere {STRING} eller {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} accepterer nu {STRING} diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 7b1bb54c7b..d42501a8ce 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -870,6 +870,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nieuw {STRING} nu beschikbaar! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} accepteert geen {STRING} meer STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} accepteert geen {STRING} of {STRING} meer STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} accepteert voortaan {STRING} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index d8bb1f84d3..9f7eea532d 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -847,6 +847,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING} diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 18c0355f0d..19e94d21c0 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -870,6 +870,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}New {STRING} now available! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} no longer accepts {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} no longer accepts {STRING} or {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} now accepts {STRING} diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 2f89b7e7e7..9a415bb124 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -844,6 +844,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nova {STRING} nun haveblas! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ne plu akceptas {STRING.n} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ne plu akceptas {STRING.n} aŭ {STRING.n} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nun akceptas {STRING.n} diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 113d282637..4580752096 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -914,6 +914,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uus {STRING} saadaval! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Jaam {STATION} ei võta enam vastu veost {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Jaam {STATION} ei võta enam vastu veoseid {STRING}, ega {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Jaam {STATION} võtab nüüd vastu veost {STRING} diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 8740e75807..813b27eecf 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -828,6 +828,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nýtt {STRING} til sølu! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tekur ikki longur ímóti {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tekur ikki longur ímóti hvørki {STRING} ella {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} tekur nú ímóti {STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 31ff2ae683..aa3d8f9650 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -870,6 +870,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! – {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING}. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING} tai {STRING}. STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ottaa nyt vastaan {STRING}. diff --git a/src/lang/french.txt b/src/lang/french.txt index b620810851..10e9edb43f 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nouv{G 0 eau el elle} {STRING} disponible{NBSP}! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} n'accepte plus {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} n'accepte plus {STRING} ou {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} accepte désormais {STRING} diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index ba4eb770aa..565b08748a 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -1061,6 +1061,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Tha {STRING} ùr ri fhaighinn a-nis! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Cha ghabh {STATION} ri {STRING} tuilleadh STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Cha ghabh {STATION} ri {STRING} no {STRING} tuilleadh STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Gabhaidh {STATION} ri {STRING} a-nis diff --git a/src/lang/galician.txt b/src/lang/galician.txt index fca78a01bc..0423a415ae 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nova {STRING} dispoñíbel! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} xa non acepta máis {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} xa non acepta máis {STRING} nin {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} agora acepta {STRING} diff --git a/src/lang/german.txt b/src/lang/german.txt index 57c30eaa1a..e194fc2e59 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -865,6 +865,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Neue{G r "" s ""} {STRING} jetzt erhältlich! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} nimmt kein{G "en" "e" "" "e"} {STRING} mehr an STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} nimmt kein{G "en" "e" "" "e"} {STRING} und kein{G "en" "e" "" "e"} {STRING} mehr an STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nimmt jetzt auch {STRING} an diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 2429ebca85..efcc33e14b 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -972,6 +972,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ένα νέο {STRING} είναι πλέον διαθέσιμο! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Ο σταθμός {STATION} δεν δέχεται πια {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Ο σταθμός {STATION} δεν δέχεται πια ούτε {STRING} ούτε {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Ο σταθμός {STATION} τώρα δέχεται {STRING} diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index ab6fd06bb5..00f29a7a19 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -874,6 +874,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} חדש זמין כעת - {ENGINE}! + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} אינה מקבלת יותר {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} אינה מקבלת יותר {STRING} או {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} מקבלת כעת {STRING} diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index dc0c874acf..d4e8d0f2ec 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -934,6 +934,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Új {STRING} elérhető! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} többé nem fogad el {STRING.t} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} többé nem fogad el {STRING.t} és {STRING.t} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} most már elfogad {STRING.t} diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 6216d3c373..48de9cd774 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -827,6 +827,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ný {STRING} er nú fáanleg! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tekur ekki lengur við {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tekur ekki lengur við {STRING} eða {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} tekur nú við {STRING} diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index ee4e49a4da..4642ce4feb 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -863,6 +863,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} jenis baru telah diluncurkan! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} atau {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} Sekarang menerima {STRING} diff --git a/src/lang/irish.txt b/src/lang/irish.txt index e152098db1..35830743f1 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -856,6 +856,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Tá {STRING} nua ar fáil anois! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Ní ghlacann {STATION} le {STRING} a thuilleadh STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Ní ghlacann {STATION} le {STRING} ná le {STRING} a thuilleadh STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Glacann {STATION} le {STRING} anois diff --git a/src/lang/italian.txt b/src/lang/italian.txt index a9e64e5798..47d4414614 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -872,6 +872,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nuov{G o o a} {STRING} disponibile! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} non accetta più {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} non accetta più {STRING} né {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} adesso accetta {STRING} diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 7caa3acd95..8c32715c71 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -856,6 +856,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING}が新登場! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION}は今後{STRING}を受入れません STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}は今後{STRING}と{STRING}を受入れません STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION}は今後{STRING}を受入れます diff --git a/src/lang/korean.txt b/src/lang/korean.txt index d825a1784f..cacac9e7a5 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}신형 {STRING}{G 0 "을" "를"} 사용할 수 있습니다! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION}에서 더 이상 {STRING}{G 1 "을" "를"} 받지 않습니다. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}에서 더 이상 {STRING}/{STRING}{G 2 "을" "를"} 받지 않습니다. STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION}에서 이제 {STRING}{G 1 "을" "를"} 받을 수 있습니다. diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 73eebb2d69..23fe40a358 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -1052,6 +1052,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G us a um i ae a} {STRING} parabil{G 0 is is e es es ia}! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} non diutius {STRING.acc} accipit STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} non diutius {STRING.acc} {STRING.acc}que accipit STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} nunc {STRING.acc} accipit diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 0c05364a59..1fb3bff1be 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -855,6 +855,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Tagad ir pieejams jauns {STRING}! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} vairs nepieņem {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} vairs nepieņem {STRING} vai {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} pieņem {STRING} diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index c6b85ff01e..9deca5c1e0 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -1061,6 +1061,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Naujas{STRING} - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} nebepriima {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} nebepriima {STRING} arba {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} jau priima {STRING} diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 1cf1c26d52..8f6457be57 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -865,6 +865,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Neie/Neit {STRING} verfügbar! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} akzeptéiert {STRING} net méi STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} akzeptéiert {STRING} oder {STRING} net méi STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} akzeptéiert elo {STRING} diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 3cfc2cba2b..3a00bac589 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -832,6 +832,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} baru kini boleh boleh dibeli! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tidak lagi menerima {STRING} or {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} kini menerima {STRING} diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 822258c4f1..cd2b797863 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -872,6 +872,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny{G "" "" tt} {STRING} er nå tilgjengelig! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} godtar ikke lenger {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} godtar ikke lenger {STRING} eller {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} godtar nå {STRING} diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index ed8810b1fb..1ed23d682a 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -858,6 +858,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING}type er tilgjengeleg! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} godtek ikkje lenger {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} godtek ikkje lenger {STRING} eller {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} godtek no {STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 31cc2c3a73..e7c1356969 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -1250,6 +1250,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Dostępn{G y a e} now{G y a e} {STRING} - {ENGINE}! + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} nie akceptuje już {STRING.d} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} nie akceptuje już {STRING.d} ani {STRING.d} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} już akceptuje {STRING.b} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index fca563e982..cfb33fc8eb 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -869,6 +869,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo modelo de {STRING} agora disponível! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} não aceita mais {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} não aceita mais {STRING} ou {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} agora aceita {STRING} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 8408c95ca4..46e128164c 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -858,6 +858,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Un nou tip de {STRING} este acum disponibil! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} nu mai acceptă {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} nu mai acceptă {STRING} sau {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} acceptă acum {STRING} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 6aabbe85e3..8c3776a776 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1015,6 +1015,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Начато серийное производство новой модели {STRING.gen}! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} больше не принимает {STRING.acc} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} больше не принимает {STRING.acc} и {STRING.acc} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} теперь принимает {STRING.acc} diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index f1ff228d94..bd12d84c99 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -1055,6 +1055,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G "" a o} {STRING} od sada u prodaji! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} više ne prihvata {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} više ne prihvata ni {STRING} ni {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} od sada prihvata {STRING.aku} diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index e9e2fe1e55..2a2f69738a 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -869,6 +869,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}新 {STRING} 上市了! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} 将不再接受 {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} 将不再接受 {STRING} 和 {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} 开始接受 {STRING} diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index e78fbf0193..66bbf080b6 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -924,6 +924,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nov{G "ý" "á" "é"} {STRING} dostupn{G "ý" "á" "é"}! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} už neprijíma {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} už neprijíma {STRING} alebo {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} teraz prijíma {STRING} diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index e6dc5baae6..fb6ad03cd8 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -1010,6 +1010,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Novo! {STRING} sedaj na razpolago! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ne sprejema več {STRING.r} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ne sprejema več {STRING.r} ali {STRING.r} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} sedaj sprejema {STRING.t} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index fb2abd8095..b04d8dbf8e 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}¡Nuev{G o a} {STRING} ahora disponible! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ya no acepta {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ya no acepta {STRING} ni {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} acepta ahora {STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index d034983925..e01f831315 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}¡Nuev{G o a} {STRING} ahora disponible! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ya no acepta {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ya no acepta {STRING} ni {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} acepta ahora {STRING} diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 5bf0df94f8..7881727d71 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -870,6 +870,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Ny {STRING} är nu tillgänglig - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} tar inte längre emot {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} tar inte längre emot {STRING} eller {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} tar nu emot {STRING} diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index ccb6b134ae..3634865098 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -839,6 +839,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}புதிய {STRING} இப்போது கிடைக்கும்! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} இனிமேல் {STRING} ஏற்றுக்கொள்ளாது STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} இனிமேல் {STRING} அல்லது {STRING} ஏற்றுக்கொள்ளாது STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} இப்போது {STRING} ஏற்றுக்கொள்கிறது diff --git a/src/lang/thai.txt b/src/lang/thai.txt index bbd31feb34..a17f625bb6 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -847,6 +847,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}ใหม่ {STRING} มีจำหน่ายแล้ว - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ไม่ต้องการรับ {STRING} อีกต่อไป STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ไม่รับ {STRING} หรือ {STRING} แล้ว STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} ขณะนี้ยอมรับ {STRING} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index f41cba7424..a1348c3030 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -856,6 +856,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} 問世了! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} 不再接受 {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} 不再接受 {STRING} 或 {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} 現在接受 {STRING} diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index a7d740499e..b8e34b3ce7 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -866,6 +866,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Yeni {STRING} artık kullanılabilir! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} artık {STRING} kabul etmiyor STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} artık {STRING} veya {STRING} kabul etmiyor STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} artık {STRING} kabul ediyor diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index a29d94c98f..54cbe37685 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -998,6 +998,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Відтепер в наявності новий {STRING}! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} більше не приймає {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} більше не приймає {STRING} або {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} тепер приймає {STRING} diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index 820f1c0fa6..cdca14b152 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -466,6 +466,7 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Пӗлт + # Extra view window # Game options window diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 918d99196a..355da5ceb8 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -856,6 +856,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Neie {STRING} is no beskikber! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} akseptearret gjin {STRING} mear STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} akseptearret gjin {STRING} en {STRING} mear STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} akseptearrret no {STRING} diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 9fcfe2a61f..90e7cc2af4 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -452,6 +452,7 @@ STR_NEWS_MESSAGE_CAPTION :{WHITE}Sendajo + # Extra view window # Game options window diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 94937dcb6f..c77747a4d5 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -776,6 +776,7 @@ STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE + # Extra view window # Game options window diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index c90779ff6e..8f9079d282 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -386,6 +386,7 @@ STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE + # Extra view window # Game options window diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index c6530a47e8..f6e6832ff3 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -685,6 +685,7 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC + # Extra view window # Game options window diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index b823fa23ce..907d4deb35 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -845,6 +845,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK} {STRING} جدید هم اکنون قابل دسترسی است! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} دیگر {STRING} قبول نمی کند STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} دیگر {STRING} و {STRING} قبول نمی کند STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} از این پس {STRING} را هم قبول می کند diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index c8530bca49..60b897192c 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -827,6 +827,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}نئی {STRING} اب دستیاب ہے! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} مزید {STRING} قبول نہیں کرتا STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} مزید {STRING} یا {STRING} قبول نہیں کرتا STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} اب قبول کرتا ہے {STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 7220be7f87..ec481da973 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -870,6 +870,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}{STRING} mới đã ra lò! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Ga, bến, cảng {STATION} không chấp nhận {STRING} nữa. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Ga, bến, cảng {STATION} không chấp nhận {STRING} hoặc {STRING} nữa STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}{STATION} đã chấp nhận {STRING} diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index ce0ae50bf0..d107bd82d5 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -857,6 +857,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Mae {STRING} newydd yn awr ar gael! - {ENGINE} + STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}Nid yw {STATION} bellach yn derbyn {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}Nid yw {STATION} bellach yn derbyn {STRING} na {STRING} STR_NEWS_STATION_NOW_ACCEPTS_CARGO :{WHITE}Mae {STATION} nawr yn derbyn {STRING} From f0ff7003fd60712fad6ce9d4662395536c43c06e Mon Sep 17 00:00:00 2001 From: Samu Date: Sun, 22 Dec 2019 22:45:48 +0000 Subject: [PATCH 47/84] Fix: Snowline height interval is now 1, in both World Generation and Settings windows - Previously, it was 1 in World Gen window, but 5 in Settings window --- src/table/settings.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/src/table/settings.ini b/src/table/settings.ini index 482933e67f..4c3d6ce0d4 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -1380,6 +1380,7 @@ guiflags = SGF_NO_NETWORK def = DEF_SNOWLINE_HEIGHT min = MIN_SNOWLINE_HEIGHT max = MAX_SNOWLINE_HEIGHT +interval = 1 str = STR_CONFIG_SETTING_SNOWLINE_HEIGHT strhelp = STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT strval = STR_JUST_COMMA From 26ce4eb45d98521568315227378610323bf92226 Mon Sep 17 00:00:00 2001 From: Mingwei Samuel Date: Thu, 16 May 2019 11:52:53 -0700 Subject: [PATCH 48/84] Fix #7430: when train visits station, only reset time_since_pickup if has room to load --- src/economy.cpp | 82 ++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/src/economy.cpp b/src/economy.cpp index 256e94d5cb..a0907efbe9 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1744,53 +1744,59 @@ static void LoadUnloadVehicle(Vehicle *front) /* if last speed is 0, we treat that as if no vehicle has ever visited the station. */ ge->last_speed = min(t, 255); ge->last_age = min(_cur_year - front->build_year, 255); - ge->time_since_pickup = 0; assert(v->cargo_cap >= v->cargo.StoredCount()); - /* If there's goods waiting at the station, and the vehicle - * has capacity for it, load it on the vehicle. */ + /* Capacity available for loading more cargo. */ uint cap_left = v->cargo_cap - v->cargo.StoredCount(); - if (cap_left > 0 && (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) { - if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); - if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v)); - uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy, next_station); - if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) { - /* Remember if there are reservations left so that we don't stop - * loading before they're loaded. */ - SetBit(reservation_left, v->cargo_type); - } + if (cap_left > 0) { + /* If vehicle can load cargo, reset time_since_pickup. */ + ge->time_since_pickup = 0; - /* Store whether the maximum possible load amount was loaded or not.*/ - if (loaded == cap_left) { - SetBit(full_load_amount, v->cargo_type); - } else { - ClrBit(full_load_amount, v->cargo_type); - } + /* If there's goods waiting at the station, and the vehicle + * has capacity for it, load it on the vehicle. */ + if ((v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0 || ge->cargo.AvailableCount() > 0) && MayLoadUnderExclusiveRights(st, v)) { + if (v->cargo.StoredCount() == 0) TriggerVehicle(v, VEHICLE_TRIGGER_NEW_CARGO); + if (_settings_game.order.gradual_loading) cap_left = min(cap_left, GetLoadAmount(v)); - /* TODO: Regarding this, when we do gradual loading, we - * should first unload all vehicles and then start - * loading them. Since this will cause - * VEHICLE_TRIGGER_EMPTY to be called at the time when - * the whole vehicle chain is really totally empty, the - * completely_emptied assignment can then be safely - * removed; that's how TTDPatch behaves too. --pasky */ - if (loaded > 0) { - completely_emptied = false; - anything_loaded = true; - - st->time_since_load = 0; - st->last_vehicle_type = v->type; - - if (ge->cargo.TotalCount() == 0) { - TriggerStationRandomisation(st, st->xy, SRT_CARGO_TAKEN, v->cargo_type); - TriggerStationAnimation(st, st->xy, SAT_CARGO_TAKEN, v->cargo_type); - AirportAnimationTrigger(st, AAT_STATION_CARGO_TAKEN, v->cargo_type); + uint loaded = ge->cargo.Load(cap_left, &v->cargo, st->xy, next_station); + if (v->cargo.ActionCount(VehicleCargoList::MTA_LOAD) > 0) { + /* Remember if there are reservations left so that we don't stop + * loading before they're loaded. */ + SetBit(reservation_left, v->cargo_type); } - new_load_unload_ticks += loaded; + /* Store whether the maximum possible load amount was loaded or not.*/ + if (loaded == cap_left) { + SetBit(full_load_amount, v->cargo_type); + } else { + ClrBit(full_load_amount, v->cargo_type); + } - dirty_vehicle = dirty_station = true; + /* TODO: Regarding this, when we do gradual loading, we + * should first unload all vehicles and then start + * loading them. Since this will cause + * VEHICLE_TRIGGER_EMPTY to be called at the time when + * the whole vehicle chain is really totally empty, the + * completely_emptied assignment can then be safely + * removed; that's how TTDPatch behaves too. --pasky */ + if (loaded > 0) { + completely_emptied = false; + anything_loaded = true; + + st->time_since_load = 0; + st->last_vehicle_type = v->type; + + if (ge->cargo.TotalCount() == 0) { + TriggerStationRandomisation(st, st->xy, SRT_CARGO_TAKEN, v->cargo_type); + TriggerStationAnimation(st, st->xy, SAT_CARGO_TAKEN, v->cargo_type); + AirportAnimationTrigger(st, AAT_STATION_CARGO_TAKEN, v->cargo_type); + } + + new_load_unload_ticks += loaded; + + dirty_vehicle = dirty_station = true; + } } } From c7ead8388c0f9b62a0df90966e5caa994ca7b477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Mon, 2 Dec 2019 22:54:52 +0100 Subject: [PATCH 49/84] Codechange: Improve MSVC ARM64 support --- src/cpu.cpp | 4 +- src/os/windows/crashlog_win.cpp | 69 ++++++++++++++++++++++++++++++--- 2 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index 9fbd9d5e7d..87aa841324 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -16,7 +16,7 @@ /* rdtsc for MSC_VER, uses simple inline assembly, or _rdtsc * from external win64.asm because VS2005 does not support inline assembly */ -#if defined(_MSC_VER) && !defined(RDTSC_AVAILABLE) +#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) && !defined(RDTSC_AVAILABLE) #include uint64 ottd_rdtsc() { @@ -85,7 +85,7 @@ uint64 ottd_rdtsc() {return 0;} * Other platforms/architectures don't have CPUID, so zero the info and then * most (if not all) of the features are set as if they do not exist. */ -#if defined(_MSC_VER) +#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) void ottd_cpuid(int info[4], int type) { __cpuid(info, type); diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp index b4abd93241..9585bdf20f 100644 --- a/src/os/windows/crashlog_win.cpp +++ b/src/os/windows/crashlog_win.cpp @@ -259,7 +259,7 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod) ep->ContextRecord->Rip, ep->ContextRecord->EFlags ); -#else +#elif defined(_M_IX86) buffer += seprintf(buffer, last, " EAX: %.8X EBX: %.8X ECX: %.8X EDX: %.8X\n" " ESI: %.8X EDI: %.8X EBP: %.8X ESP: %.8X\n" @@ -275,13 +275,57 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod) (int)ep->ContextRecord->Eip, (int)ep->ContextRecord->EFlags ); +#elif defined(_M_ARM64) + buffer += seprintf(buffer, last, + " X0: %.16I64X X1: %.16I64X X2: %.16I64X X3: %.16I64X\n" + " X4: %.16I64X X5: %.16I64X X6: %.16I64X X7: %.16I64X\n" + " X8: %.16I64X X9: %.16I64X X10: %.16I64X X11: %.16I64X\n" + " X12: %.16I64X X13: %.16I64X X14: %.16I64X X15: %.16I64X\n" + " X16: %.16I64X X17: %.16I64X X18: %.16I64X X19: %.16I64X\n" + " X20: %.16I64X X21: %.16I64X X22: %.16I64X X23: %.16I64X\n" + " X24: %.16I64X X25: %.16I64X X26: %.16I64X X27: %.16I64X\n" + " X28: %.16I64X Fp: %.16I64X Lr: %.16I64X\n", + ep->ContextRecord->X0, + ep->ContextRecord->X1, + ep->ContextRecord->X2, + ep->ContextRecord->X3, + ep->ContextRecord->X4, + ep->ContextRecord->X5, + ep->ContextRecord->X6, + ep->ContextRecord->X7, + ep->ContextRecord->X8, + ep->ContextRecord->X9, + ep->ContextRecord->X10, + ep->ContextRecord->X11, + ep->ContextRecord->X12, + ep->ContextRecord->X13, + ep->ContextRecord->X14, + ep->ContextRecord->X15, + ep->ContextRecord->X16, + ep->ContextRecord->X17, + ep->ContextRecord->X18, + ep->ContextRecord->X19, + ep->ContextRecord->X20, + ep->ContextRecord->X21, + ep->ContextRecord->X22, + ep->ContextRecord->X23, + ep->ContextRecord->X24, + ep->ContextRecord->X25, + ep->ContextRecord->X26, + ep->ContextRecord->X27, + ep->ContextRecord->X28, + ep->ContextRecord->Fp, + ep->ContextRecord->Lr + ); #endif buffer += seprintf(buffer, last, "\n Bytes at instruction pointer:\n"); #ifdef _M_AMD64 byte *b = (byte*)ep->ContextRecord->Rip; -#else +#elif defined(_M_IX86) byte *b = (byte*)ep->ContextRecord->Eip; +#elif defined(_M_ARM64) + byte *b = (byte*)ep->ContextRecord->Pc; #endif for (int i = 0; i != 24; i++) { if (IsBadReadPtr(b, 1)) { @@ -299,8 +343,10 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod) buffer += seprintf(buffer, last, "Stack trace:\n"); #ifdef _M_AMD64 uint32 *b = (uint32*)ep->ContextRecord->Rsp; -#else +#elif defined(_M_IX86) uint32 *b = (uint32*)ep->ContextRecord->Esp; +#elif defined(_M_ARM64) + uint32 *b = (uint32*)ep->ContextRecord->Sp; #endif for (int j = 0; j != 24; j++) { for (int i = 0; i != 8; i++) { @@ -371,10 +417,14 @@ char *CrashLogWindows::AppendDecodedStacktrace(char *buffer, const char *last) c frame.AddrPC.Offset = ep->ContextRecord->Rip; frame.AddrFrame.Offset = ep->ContextRecord->Rbp; frame.AddrStack.Offset = ep->ContextRecord->Rsp; -#else +#elif defined(_M_IX86) frame.AddrPC.Offset = ep->ContextRecord->Eip; frame.AddrFrame.Offset = ep->ContextRecord->Ebp; frame.AddrStack.Offset = ep->ContextRecord->Esp; +#elif defined(_M_ARM64) + frame.AddrPC.Offset = ep->ContextRecord->Pc; + frame.AddrFrame.Offset = ep->ContextRecord->Fp; + frame.AddrStack.Offset = ep->ContextRecord->Sp; #endif frame.AddrPC.Mode = AddrModeFlat; frame.AddrFrame.Mode = AddrModeFlat; @@ -527,9 +577,12 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep) #ifdef _M_AMD64 ep->ContextRecord->Rip = (DWORD64)ShowCrashlogWindow; ep->ContextRecord->Rsp = (DWORD64)_safe_esp; -#else +#elif defined(_M_IX86) ep->ContextRecord->Eip = (DWORD)ShowCrashlogWindow; ep->ContextRecord->Esp = (DWORD)_safe_esp; +#elif defined(_M_ARM64) + ep->ContextRecord->Pc = (DWORD64)ShowCrashlogWindow; + ep->ContextRecord->Sp = (DWORD64)_safe_esp; #endif return EXCEPTION_CONTINUE_EXECUTION; } @@ -545,7 +598,7 @@ static void CDECL CustomAbort(int signal) /* static */ void CrashLog::InitialiseCrashLog() { -#ifdef _M_AMD64 +#if defined(_M_AMD64) || defined(_M_ARM64) CONTEXT ctx; RtlCaptureContext(&ctx); @@ -553,7 +606,11 @@ static void CDECL CustomAbort(int signal) * function. As we are simulating a function call with the safe ESP value, * we need to subtract 8 for the imaginary return address otherwise stack * alignment would be wrong in the called function. */ +#if defined(_M_ARM64) + _safe_esp = (void *)(ctx.Sp - 8); +#else _safe_esp = (void *)(ctx.Rsp - 8); +#endif #else #if defined(_MSC_VER) _asm { From 40605efd1c02dc15695c8f23ec062ae836d8d493 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Tue, 24 Dec 2019 17:37:30 +0000 Subject: [PATCH 50/84] Codechange: Use KDTree for AirportGetNearestTown (#7424) --- src/station_cmd.cpp | 42 ++++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index deed5161b8..8f057453f9 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -2129,23 +2129,6 @@ CommandCost CmdRemoveRoadStop(TileIndex tile, DoCommandFlag flags, uint32 p1, ui return had_success ? cost : last_error; } -/** - * Computes the minimal distance from town's xy to any airport's tile. - * @param it An iterator over all airport tiles. - * @param town_tile town's tile (t->xy) - * @return minimal manhattan distance from town_tile to any airport's tile - */ -static uint GetMinimalAirportDistanceToTile(TileIterator &it, TileIndex town_tile) -{ - uint mindist = UINT_MAX; - - for (TileIndex cur_tile = it; cur_tile != INVALID_TILE; cur_tile = ++it) { - mindist = min(mindist, DistanceManhattan(town_tile, cur_tile)); - } - - return mindist; -} - /** * Get a possible noise reduction factor based on distance from town center. * The further you get, the less noise you generate. @@ -2185,14 +2168,25 @@ uint8 GetAirportNoiseLevelForDistance(const AirportSpec *as, uint distance) */ Town *AirportGetNearestTown(const AirportSpec *as, const TileIterator &it, uint &mindist) { + assert(Town::GetNumItems() > 0); + Town *nearest = nullptr; - uint add = as->size_x + as->size_y - 2; // GetMinimalAirportDistanceToTile can differ from DistanceManhattan by this much - mindist = UINT_MAX - add; // prevent overflow - for (Town *t : Town::Iterate()) { - if (DistanceManhattan(t->xy, it) < mindist + add) { // avoid calling GetMinimalAirportDistanceToTile too often - TileIterator *copy = it.Clone(); - uint dist = GetMinimalAirportDistanceToTile(*copy, t->xy); - delete copy; + + uint perimeter_min_x = TileX(it); + uint perimeter_min_y = TileY(it); + uint perimeter_max_x = perimeter_min_x + as->size_x - 1; + uint perimeter_max_y = perimeter_min_y + as->size_y - 1; + + mindist = UINT_MAX - 1; // prevent overflow + + std::unique_ptr copy(it.Clone()); + for (TileIndex cur_tile = *copy; cur_tile != INVALID_TILE; cur_tile = ++*copy) { + if (TileX(cur_tile) == perimeter_min_x || TileX(cur_tile) == perimeter_max_x || TileY(cur_tile) == perimeter_min_y || TileY(cur_tile) == perimeter_max_y) { + Town *t = CalcClosestTownFromTile(cur_tile, mindist + 1); + if (t == nullptr) continue; + + uint dist = DistanceManhattan(t->xy, cur_tile); + if (dist == mindist && t->index < nearest->index) nearest = t; if (dist < mindist) { nearest = t; mindist = dist; From d427559eba00619709342f06f372db425c278537 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 24 Dec 2019 19:45:40 +0100 Subject: [PATCH 51/84] Update: Translations from eints french: 1 change by arikover --- src/lang/french.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index 10e9edb43f..f7320f15f3 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nouv{G 0 eau el elle} {STRING} disponible{NBSP}! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Ouvrir la fenêtre de groupe de ce véhicule STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} n'accepte plus {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} n'accepte plus {STRING} ou {STRING} From 18f03a300b12bb022fb3273ff6273c430b28f787 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sat, 21 Dec 2019 19:05:47 +0000 Subject: [PATCH 52/84] Update: Prepare for 1.10.0-beta2 release --- changelog.txt | 25 +++++++++++++++++++++++++ known-bugs.txt | 4 ++-- os/debian/changelog | 6 ++++++ os/rpm/openttd.spec | 4 ++-- os/windows/installer/install.nsi | 4 ++-- 5 files changed, 37 insertions(+), 6 deletions(-) diff --git a/changelog.txt b/changelog.txt index cc0fdb0c19..143513dbe3 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,28 @@ +1.10.0-beta2 (2019-12-25) +------------------------------------------------------------------------ +- Feature: [Script] More error mappings (#7857) +- Feature: Ctrl+Click on a vehicle in the vehicle group window selects and scrolls to the vehicle's group (#7800) +- Feature: Ctrl+Click on the vehicle details button in the vehicle view window opens the vehicle group window focused on the vehicle (#7800) +- Feature: Add a button to the vehicle advisory news window to open the vehicle's group window (#7800) +- Feature: Ctrl+Click on a vehicle in the vehicle list window opens the vehicle group window focused on the vehicle's group (#7800) +- Fix: Custom sea level default value is now equal to minimum value (#7866) +- Fix: [NewGRF] Various tracktype fixes (#7863) +- Fix: Infrastructure total update when removing tram road stop (#7856) +- Fix #7847: Use ViewportSign coordinates for sign Kdtree coordinates (#7849) +- Fix #7836: Check coherency of NewGRF parameter min/max (#7840) +- Fix #7673: [Script] Allow removal of custom town text (#7834) +- Fix: Crash when displaying an error message at map edges (#7833) +- Fix #7783, #7816: [SDL2] Fix input handling in edit context (#7825) +- Fix #7697: Tile query on HQs did not display cargo correctly (#7824) +- Fix #7820: Possible game crash when removing oil rig (#7821) +- Fix #7606: Rare crash when trying to clean up a crashed script (#7819) +- Fix #7784: [SDL2] up/down/home/end key behaviour (#7815) +- Fix #7631: 16 out cargo support for industry directory (#7809) +- Fix #7646: Crash on random map generation failure (#7805) +- Fix #7430: Only reset time since pickup when train visits station if it has room to load (#7595) +- Fix #5405: Aircraft could route to depots outside their range (#7104) + + 1.10.0-beta1 (2019-10-29) ------------------------------------------------------------------------ - Feature: Configurable minimum age for companies before allowing share trading (#7780) diff --git a/known-bugs.txt b/known-bugs.txt index 2053a6ad37..440a4709ff 100644 --- a/known-bugs.txt +++ b/known-bugs.txt @@ -1,6 +1,6 @@ OpenTTD's known bugs -Last updated: 2019-10-29 -Release version: 1.10.0-beta1 +Last updated: 2019-12-25 +Release version: 1.10.0-beta2 ------------------------------------------------------------------------ diff --git a/os/debian/changelog b/os/debian/changelog index a523172234..6b24aaa7d5 100644 --- a/os/debian/changelog +++ b/os/debian/changelog @@ -1,3 +1,9 @@ +openttd (1.10.0~beta2-0) unstable; urgency=low + + * New upstream release 1.10.0-beta2 + + -- OpenTTD Wed, 25 Dec 2019 00:00:00 +0000 + openttd (1.10.0~beta1-0) unstable; urgency=low * New upstream release 1.10.0-beta1 diff --git a/os/rpm/openttd.spec b/os/rpm/openttd.spec index 4ba8c00672..340a9886b9 100644 --- a/os/rpm/openttd.spec +++ b/os/rpm/openttd.spec @@ -17,9 +17,9 @@ # Name: openttd -Version: 1.10.beta1 +Version: 1.10.beta2 Release: 0 -%define srcver 1.10.0-beta1 +%define srcver 1.10.0-beta2 Summary: An open source reimplementation of Chris Sawyer's Transport Tycoon Deluxe License: GPL-2.0 Group: Amusements/Games/Strategy/Other diff --git a/os/windows/installer/install.nsi b/os/windows/installer/install.nsi index a4dd610d93..2561b76d55 100644 --- a/os/windows/installer/install.nsi +++ b/os/windows/installer/install.nsi @@ -2,8 +2,8 @@ !define APPV_MAJOR 1 !define APPV_MINOR 10 !define APPV_MAINT 0 -!define APPV_BUILD 0 -!define APPV_EXTRA "-beta1" +!define APPV_BUILD 1 +!define APPV_EXTRA "-beta2" !define APPNAME "OpenTTD" ; Define application name !define APPVERSION "${APPV_MAJOR}.${APPV_MINOR}.${APPV_MAINT}${APPV_EXTRA}" ; Define application version From 16537b472cf316427ab0c4ce8842272a5015143a Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 25 Dec 2019 19:45:40 +0100 Subject: [PATCH 53/84] Update: Translations from eints dutch: 1 change by JanWillem --- src/lang/dutch.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index d42501a8ce..23ec3742de 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -870,6 +870,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Nieuw {STRING} nu beschikbaar! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Groepsvenster openen met focus op groep van voertuig STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} accepteert geen {STRING} meer STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} accepteert geen {STRING} of {STRING} meer From a6901f8ae8fd1620b812598c336e33b9c07f6942 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 26 Dec 2019 19:45:41 +0100 Subject: [PATCH 54/84] Update: Translations from eints russian: 1 change by Lone_Wolf --- src/lang/russian.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 8c3776a776..179c9d4ac6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1015,6 +1015,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Начато серийное производство новой модели {STRING.gen}! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Открыть окно групп транспорта и выбрать группу, к которой принадлежит это транспортное средство STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} больше не принимает {STRING.acc} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} больше не принимает {STRING.acc} и {STRING.acc} From 7f250327665af8452a74073c28d6f8e287feeff1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 26 Dec 2019 19:36:23 +0100 Subject: [PATCH 55/84] Fix: Let bootstrap GUI work on Win32 with Uniscribe but no Freetype --- src/bootstrap_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 29b066cd12..45cd010242 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -11,7 +11,7 @@ #include "base_media_base.h" #include "blitter/factory.hpp" -#if defined(WITH_FREETYPE) +#if defined(WITH_FREETYPE) || defined(WITH_UNISCRIBE) #include "core/geometry_func.hpp" #include "fontcache.h" @@ -218,7 +218,7 @@ bool HandleBootstrap() if (BlitterFactory::GetCurrentBlitter()->GetScreenDepth() == 0) goto failure; /* If there is no network or no freetype, then there is nothing we can do. Go straight to failure. */ -#if defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(_WIN32) || defined(__APPLE__)) +#if (defined(_WIN32) && defined(WITH_UNISCRIBE)) || (defined(WITH_FREETYPE) && (defined(WITH_FONTCONFIG) || defined(__APPLE__))) if (!_network_available) goto failure; /* First tell the game we're bootstrapping. */ From 0e7839377409bd70c09c75739f35301991c29c29 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Thu, 26 Dec 2019 19:36:53 +0100 Subject: [PATCH 56/84] Fix: Reference correct section in README file for baseset info --- src/bootstrap_gui.cpp | 2 +- src/openttd.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 45cd010242..d2445c23a4 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -262,6 +262,6 @@ bool HandleBootstrap() /* Failure to get enough working to get a graphics set. */ failure: - usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD. See section 4.1 of README.md."); + usererror("Failed to find a graphics set. Please acquire a graphics set for OpenTTD. See section 1.4 of README.md."); return false; } diff --git a/src/openttd.cpp b/src/openttd.cpp index 48d889aef4..ffd30cf7b8 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -804,7 +804,7 @@ int openttd_main(int argc, char *argv[]) if (sounds_set == nullptr && BaseSounds::ini_set != nullptr) sounds_set = stredup(BaseSounds::ini_set); if (!BaseSounds::SetSet(sounds_set)) { if (StrEmpty(sounds_set) || !BaseSounds::SetSet(nullptr)) { - usererror("Failed to find a sounds set. Please acquire a sounds set for OpenTTD. See section 4.1 of README.md."); + usererror("Failed to find a sounds set. Please acquire a sounds set for OpenTTD. See section 1.4 of README.md."); } else { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND); msg.SetDParamStr(0, sounds_set); @@ -817,7 +817,7 @@ int openttd_main(int argc, char *argv[]) if (music_set == nullptr && BaseMusic::ini_set != nullptr) music_set = stredup(BaseMusic::ini_set); if (!BaseMusic::SetSet(music_set)) { if (StrEmpty(music_set) || !BaseMusic::SetSet(nullptr)) { - usererror("Failed to find a music set. Please acquire a music set for OpenTTD. See section 4.1 of README.md."); + usererror("Failed to find a music set. Please acquire a music set for OpenTTD. See section 1.4 of README.md."); } else { ErrorMessageData msg(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND); msg.SetDParamStr(0, music_set); From 69f9529ba32df396c4353b2d1c752a3f6609069a Mon Sep 17 00:00:00 2001 From: Konstantin Gribov Date: Fri, 27 Dec 2019 11:32:34 +0300 Subject: [PATCH 57/84] Add: Missing keycodes for hotkeys.cfg (#7850) Added missing keycodes mapping to `_keycode_to_name` array to allow their use in `hotkeys.cfg`. Also reordered them according to `WindowKeyCodes` order. Signed-off-by: Konstantin Gribov --- src/hotkeys.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 11be10b302..d5cd90b3c5 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -38,10 +38,15 @@ static const KeycodeNames _keycode_to_name[] = { {"META", WKC_META}, {"GLOBAL", WKC_GLOBAL_HOTKEY}, {"ESC", WKC_ESC}, - {"DEL", WKC_DELETE}, {"BACKSPACE", WKC_BACKSPACE}, + {"INS", WKC_INSERT}, + {"DEL", WKC_DELETE}, + {"PAGEUP", WKC_PAGEUP}, + {"PAGEDOWN", WKC_PAGEDOWN}, + {"END", WKC_END}, + {"HOME", WKC_HOME}, {"RETURN", WKC_RETURN}, - {"BACKQUOTE", WKC_BACKQUOTE}, + {"SPACE", WKC_SPACE}, {"F1", WKC_F1}, {"F2", WKC_F2}, {"F3", WKC_F3}, @@ -54,11 +59,24 @@ static const KeycodeNames _keycode_to_name[] = { {"F10", WKC_F10}, {"F11", WKC_F11}, {"F12", WKC_F12}, + {"BACKQUOTE", WKC_BACKQUOTE}, {"PAUSE", WKC_PAUSE}, - {"COMMA", WKC_COMMA}, - {"NUM_PLUS", WKC_NUM_PLUS}, + {"NUM_DIV", WKC_NUM_DIV}, + {"NUM_MUL", WKC_NUM_MUL}, {"NUM_MINUS", WKC_NUM_MINUS}, + {"NUM_PLUS", WKC_NUM_PLUS}, + {"NUM_ENTER", WKC_NUM_ENTER}, + {"NUM_DOT", WKC_NUM_DECIMAL}, + {"/", WKC_SLASH}, + {";", WKC_SEMICOLON}, {"=", WKC_EQUALS}, + {"[", WKC_L_BRACKET}, + {"\\", WKC_BACKSLASH}, + {"]", WKC_R_BRACKET}, + {"'", WKC_SINGLEQUOTE}, + {",", WKC_COMMA}, + {"COMMA", WKC_COMMA}, // legacy variant, should be below "," + {".", WKC_PERIOD}, {"-", WKC_MINUS}, }; From 2fd871e2af5cb9e239628843fbd40499ee43406a Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Wed, 18 Sep 2019 20:18:45 +0200 Subject: [PATCH 58/84] Feature: Configurable game ending year Functionally reverts 683b65ee1 --- src/date.cpp | 6 ++++-- src/date_type.h | 2 ++ src/lang/english.txt | 4 ++++ src/saveload/afterload.cpp | 9 +++++++++ src/saveload/saveload.h | 1 + src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/settings.ini | 27 +++++++++++++++++++++++++-- 8 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/date.cpp b/src/date.cpp index c45396efea..be0a7782de 100644 --- a/src/date.cpp +++ b/src/date.cpp @@ -27,6 +27,8 @@ Date _date; ///< Current date in days (day counter) DateFract _date_fract; ///< Fractional part of the day. uint16 _tick_counter; ///< Ever incrementing (and sometimes wrapping) tick counter for setting off various events +int32 _old_ending_year_slv_105; ///< Old ending year for savegames before SLV_105 + /** * Set the date. * @param date New date @@ -197,8 +199,8 @@ static void OnNewYear() if (_cur_year == _settings_client.gui.semaphore_build_before) ResetSignalVariant(); - /* check if we reached end of the game */ - if (_cur_year == ORIGINAL_END_YEAR) { + /* check if we reached end of the game (end of ending year) */ + if (_cur_year == _settings_game.game_creation.ending_year + 1) { ShowEndGameChart(); /* check if we reached the maximum year, decrement dates by a year */ } else if (_cur_year == MAX_YEAR + 1) { diff --git a/src/date_type.h b/src/date_type.h index d05b44008e..4cbcfac4ed 100644 --- a/src/date_type.h +++ b/src/date_type.h @@ -84,6 +84,8 @@ static const Year MIN_YEAR = 0; /** The default starting year */ static const Year DEF_START_YEAR = 1950; +/** The default scoring end year */ +static const Year DEF_END_YEAR = ORIGINAL_END_YEAR - 1; /** * MAX_YEAR, nicely rounded value of the number of years that can diff --git a/src/lang/english.txt b/src/lang/english.txt index bc89cfee3d..1b4069d0f3 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1552,6 +1552,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Full STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Coloured news appears in: {STRING2} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Year that the newspaper announcements get printed in colour. Before this year, it uses monochrome black/white STR_CONFIG_SETTING_STARTING_YEAR :Starting year: {STRING2} +STR_CONFIG_SETTING_ENDING_YEAR :Scoring end year: {STRING2} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Year the game ends for scoring purposes. At the end of this year, the company's score is recorded and the high-score screen is displayed, but the players can continue playing after that.{}If this is before the starting year, the high-score screen is never displayed. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Never STR_CONFIG_SETTING_SMOOTH_ECONOMY :Enable smooth economy (more, smaller changes): {STRING2} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :When enabled, industry production changes more often, and in smaller steps. This setting has usually no effect, if industry types are provided by a NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Allow buying shares from other companies: {STRING2} diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index dd9fcd534f..47d2c7b03c 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -747,6 +747,15 @@ bool AfterLoadGame() _settings_game.linkgraph.distribution_default = DT_MANUAL; } + if (IsSavegameVersionBefore(SLV_105)) { + extern int32 _old_ending_year_slv_105; // in date.cpp + _settings_game.game_creation.ending_year = _old_ending_year_slv_105 - 1; + } else if (IsSavegameVersionBefore(SLV_ENDING_YEAR)) { + /* Ending year was a GUI setting before SLV_105, was removed in revision 683b65ee1 (svn r14755). */ + /* This also converts scenarios, both when loading them into the editor, and when starting a new game. */ + _settings_game.game_creation.ending_year = DEF_END_YEAR; + } + /* Load the sprites */ GfxLoadSprites(); LoadStringWidthTable(); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index beecdc8c49..c06e8fddaa 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -301,6 +301,7 @@ enum SaveLoadVersion : uint16 { SLV_SCRIPT_MEMLIMIT, ///< 215 PR#7516 Limit on AI/GS memory consumption. SLV_MULTITILE_DOCKS, ///< 216 PR#7380 Multiple docks per station. SLV_TRADING_AGE, ///< 217 PR#7780 Configurable company trading age. + SLV_ENDING_YEAR, ///< 218 PR#7747 Configurable ending year. SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 4b7768dfa9..187ea28926 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1698,6 +1698,7 @@ static SettingsContainer &GetSettingsTree() genworld->Add(new SettingEntry("economy.town_layout")); genworld->Add(new SettingEntry("difficulty.industry_density")); genworld->Add(new SettingEntry("gui.pause_on_newgame")); + genworld->Add(new SettingEntry("game_creation.ending_year")); } SettingsPage *environment = main->Add(new SettingsPage(STR_CONFIG_SETTING_ENVIRONMENT)); diff --git a/src/settings_type.h b/src/settings_type.h index 60db6c9f97..0bc5a1a68b 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -278,6 +278,7 @@ struct NetworkSettings { struct GameCreationSettings { uint32 generation_seed; ///< noise seed for world generation Year starting_year; ///< starting date + Year ending_year; ///< scoring end date uint8 map_x; ///< X size of map uint8 map_y; ///< Y size of map byte land_generator; ///< the landscape generator diff --git a/src/table/settings.ini b/src/table/settings.ini index 4c3d6ce0d4..3e07fcc596 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -47,6 +47,8 @@ static bool UpdateServerPassword(int32 p1); static bool UpdateRconPassword(int32 p1); static bool UpdateClientConfigValues(int32 p1); +extern int32 _old_ending_year_slv_105; + /* End - Callback Functions for the various settings */ /* Some settings do not need to be synchronised when playing in multiplayer. @@ -1402,9 +1404,30 @@ str = STR_CONFIG_SETTING_STARTING_YEAR strval = STR_JUST_INT cat = SC_BASIC -[SDT_NULL] -length = 4 +[SDTG_VAR] +name = ""old_ending_year_slv_105"" +var = _old_ending_year_slv_105 +flags = SLF_NOT_IN_CONFIG +type = SLE_INT32 to = SLV_105 +def = DEF_END_YEAR +min = MIN_YEAR +max = MAX_YEAR + +[SDT_VAR] +base = GameSettings +var = game_creation.ending_year +type = SLE_INT32 +from = SLV_ENDING_YEAR +guiflags = SGF_0ISDISABLED +def = DEF_END_YEAR +min = MIN_YEAR +max = MAX_YEAR +interval = 1 +str = STR_CONFIG_SETTING_ENDING_YEAR +strhelp = STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT +strval = STR_CONFIG_SETTING_ENDING_YEAR_VALUE +cat = SC_ADVANCED [SDT_BOOL] base = GameSettings From e18f1703d2b235752b41b896f08ee987b9e09403 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 28 Dec 2019 19:45:41 +0100 Subject: [PATCH 59/84] Update: Translations from eints spanish (mexican): 1 change by Absay russian: 4 changes by Lone_Wolf --- src/lang/russian.txt | 4 ++++ src/lang/spanish_MX.txt | 1 + 2 files changed, 5 insertions(+) diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 179c9d4ac6..37601dcf4e 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1704,6 +1704,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :полност STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Цветные газеты появляются в {STRING} году STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Обычно в газетах печатают чёрно-белые изображения, а начиная с указанного года - цветные STR_CONFIG_SETTING_STARTING_YEAR :Год начала игры: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Последний год игры: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :По прошествии указанного года рассчитывается рейтинг компании и выводится таблица рекордов. После этого игру можно продолжить.{}Если указанный год предшествует году начала игры, то таблица рекордов не отображается. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Никогда STR_CONFIG_SETTING_SMOOTH_ECONOMY :Включить плавную экономику (частые, небольшие изменения): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :При включении производительность предприятий меняется чаще и более плавно. Эта настройка обычно не влияет на предприятия, внесённые в игру модулями NewGRF. STR_CONFIG_SETTING_ALLOW_SHARES :Разрешить торговлю акциями других компаний: {STRING} diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index e01f831315..4b537ba7c0 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}¡Nuev{G o a} {STRING} ahora disponible! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Abrir la ventana de este vehículo STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ya no acepta {STRING} STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ya no acepta {STRING} ni {STRING} From 86107028a491052896161f64bd783e06b1231ee1 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sun, 29 Dec 2019 14:36:45 +0100 Subject: [PATCH 60/84] Fix: Allow old NewGRF industries to blank out in/out cargo slots (#7882) --- src/industry_cmd.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index c6602b0877..628e335570 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1822,6 +1822,11 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, break; } CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); + /* Industries without "unlimited" cargo types support depend on the specific order/slots of cargo types. + * They need to be able to blank out specific slots without aborting the callback sequence, + * and solve this by returning undefined cargo indexes. Skip these. */ + if (cargo == CT_INVALID && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) continue; + /* Verify valid cargo */ if (std::find(indspec->accepts_cargo, endof(indspec->accepts_cargo), cargo) == endof(indspec->accepts_cargo)) { /* Cargo not in spec, error in NewGRF */ ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); @@ -1849,6 +1854,9 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, break; } CargoID cargo = GetCargoTranslation(GB(res, 0, 8), indspec->grf_prop.grffile); + /* Allow older GRFs to skip slots. */ + if (cargo == CT_INVALID && !(indspec->behaviour & INDUSTRYBEH_CARGOTYPES_UNLIMITED)) continue; + /* Verify valid cargo */ if (std::find(indspec->produced_cargo, endof(indspec->produced_cargo), cargo) == endof(indspec->produced_cargo)) { /* Cargo not in spec, error in NewGRF */ ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); From f6ce5c45637273e8692261c66ed646753fb31971 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 30 Dec 2019 19:45:44 +0100 Subject: [PATCH 61/84] Update: Translations from eints french: 4 changes by arikover korean: 5 changes by telk5093 --- src/lang/french.txt | 4 ++++ src/lang/korean.txt | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/lang/french.txt b/src/lang/french.txt index f7320f15f3..5608354138 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -1553,6 +1553,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Complet STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Les journaux en couleur apparaissent en{NBSP}: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Année à partir de laquelle les annonces des journaux sont imprimées en couleur. Avant cette année ils sont en noir et blanc STR_CONFIG_SETTING_STARTING_YEAR :Année de départ{NBSP}: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Année de fin du jeu{NBSP}: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :À la fin de cette année, le score de la compagnie est enregistré et la fenêtre des meilleurs scores est affichée. Il est quand même possible de continuer de jouer après, mais le score ne sera pas enregistré.{}Si le jeu commence après cette année, les meilleurs scores ne sont jamais affichés. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Jamais STR_CONFIG_SETTING_SMOOTH_ECONOMY :Permettre une économie stable (petits changements plus nombreux){NBSP}: {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Lorsqu'il est activé, la production des industries change plus souvent, et plus faiblement. Ce paramètre est généralement sans effets si les types d'industries sont fournis par un NewGRF STR_CONFIG_SETTING_ALLOW_SHARES :Permettre d'acheter des actions d'autres compagnies{NBSP}: {STRING} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index cacac9e7a5..dda1204ca4 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -871,6 +871,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}신형 {STRING}{G 0 "을" "를"} 사용할 수 있습니다! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}이 차량이 속한 차량 그룹 목록 열기 STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION}에서 더 이상 {STRING}{G 1 "을" "를"} 받지 않습니다. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION}에서 더 이상 {STRING}/{STRING}{G 2 "을" "를"} 받지 않습니다. @@ -1552,6 +1553,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :전체 메시 STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :컬러로 된 뉴스가 시작되는 해: {STRING}년 STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :신문이 컬러로 나오게 되는 연도를 설정합니다. 이 연도 이전까지는 신문이 흑백으로 나옵니다. STR_CONFIG_SETTING_STARTING_YEAR :시작 연도: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :게임 종료 연도: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :점수를 기록할 게임 종료 연도를 설정합니다. 이 연도가 지나면, 회사의 점수가 고득점 순위표에 기록되어 표시됩니다. 하지만 플레이어는 계속해서 게임을 진행할 수 있습니다.{}이 값이 시작 연도보다 이전으로 설정되어 있다면, 고득점 순위표는 나타나지 않습니다. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :안 함 STR_CONFIG_SETTING_SMOOTH_ECONOMY :부드러운 경제 변화 사용 (자주, 조금씩 변화): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :이 설정을 켜면, 1차 산업시설의 생산량이 소량으로 자주 변하게 됩니다. NewGRF로 추가한 산업시설에는 적용되지 않습니다. STR_CONFIG_SETTING_ALLOW_SHARES :다른 회사의 지분을 사는 것을 허용: {STRING} From 24bace32badeafd97df2bc849cf9fb93f3cfbce0 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Wed, 26 Jun 2019 04:30:04 +0100 Subject: [PATCH 62/84] Fix #7625: Road infrastructure cost is correctly updated on upgrading your own roads. --- src/road_cmd.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index ae328a0652..ace8edff7f 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -2269,12 +2269,12 @@ static Vehicle *UpdateRoadVehPowerProc(Vehicle *v, void *data) } /** - * Checks the tile and returns whether the current player is allowed to convert the roadtype to another roadtype + * Checks the tile and returns whether the current player is allowed to convert the roadtype to another roadtype without taking ownership * @param owner the tile owner. * @param rtt Road/tram type. * @return whether the road is convertible */ -static bool CanConvertRoadType(Owner owner, RoadTramType rtt) +static bool CanConvertUnownedRoadType(Owner owner, RoadTramType rtt) { return (owner == OWNER_NONE || (owner == OWNER_TOWN && rtt == RTT_ROAD)); } @@ -2370,7 +2370,7 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 /* Trying to convert other's road */ Owner owner = GetRoadOwner(tile, rtt); - if (!CanConvertRoadType(owner, rtt)) { + if (!CanConvertUnownedRoadType(owner, rtt)) { CommandCost ret = CheckOwnership(owner, tile); if (ret.Failed()) { error = ret; @@ -2400,7 +2400,7 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (flags & DC_EXEC) { // we can safely convert, too /* Update the company infrastructure counters. */ - if (!IsRoadStopTile(tile) && CanConvertRoadType(owner, rtt) && owner != OWNER_TOWN) { + if (!IsRoadStopTile(tile) && owner == _current_company) { ConvertRoadTypeOwner(tile, num_pieces, owner, from_type, to_type); } @@ -2447,7 +2447,7 @@ CommandCost CmdConvertRoad(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3 if (flags & DC_EXEC) { /* Update the company infrastructure counters. */ - if (CanConvertRoadType(owner, rtt) && owner != OWNER_TOWN) { + if (owner == _current_company) { ConvertRoadTypeOwner(tile, num_pieces, owner, from_type, to_type); ConvertRoadTypeOwner(endtile, num_pieces, owner, from_type, to_type); SetTunnelBridgeOwner(tile, endtile, _current_company); From 90f4abe03f7c1e1abeae3b2a2b4a37dd6086ded6 Mon Sep 17 00:00:00 2001 From: glx Date: Wed, 1 Jan 2020 01:17:03 +0100 Subject: [PATCH 63/84] Fix #7887: missing beep for some main toolbar buttons --- src/toolbar_gui.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 9a58ff4374..748a1e3dde 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -939,6 +939,7 @@ static CallBackFunction ToolbarBuildWaterClick(Window *w) DropDownList list; list.emplace_back(new DropDownListIconItem(SPR_IMG_BUILD_CANAL, PAL_NONE, STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION, 0, false)); ShowDropDownList(w, std::move(list), 0, WID_TN_WATER, 140, true, true); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; } @@ -961,6 +962,7 @@ static CallBackFunction ToolbarBuildAirClick(Window *w) DropDownList list; list.emplace_back(new DropDownListIconItem(SPR_IMG_AIRPORT, PAL_NONE, STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION, 0, false)); ShowDropDownList(w, std::move(list), 0, WID_TN_AIR, 140, true, true); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; } @@ -985,6 +987,7 @@ static CallBackFunction ToolbarForestClick(Window *w) list.emplace_back(new DropDownListIconItem(SPR_IMG_PLANTTREES, PAL_NONE, STR_LANDSCAPING_MENU_PLANT_TREES, 1, false)); list.emplace_back(new DropDownListIconItem(SPR_IMG_SIGN, PAL_NONE, STR_LANDSCAPING_MENU_PLACE_SIGN, 2, false)); ShowDropDownList(w, std::move(list), 0, WID_TN_LANDSCAPE, 100, true, true); + if (_settings_client.sound.click_beep) SndPlayFx(SND_15_BEEP); return CBF_NONE; } From e558aa8ff461ddf660240c9ed209e7d2823f0b2b Mon Sep 17 00:00:00 2001 From: pnda <43609023+ThePNDA@users.noreply.github.com> Date: Mon, 29 Apr 2019 16:58:15 +0200 Subject: [PATCH 64/84] Feature: Screenshot window --- projects/openttd_vs140.vcxproj | 6 + projects/openttd_vs140.vcxproj.filters | 18 +++ projects/openttd_vs141.vcxproj | 6 + projects/openttd_vs141.vcxproj.filters | 18 +++ projects/openttd_vs142.vcxproj | 6 + projects/openttd_vs142.vcxproj.filters | 18 +++ source.list | 3 + 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/croatian.txt | 3 - src/lang/czech.txt | 3 - src/lang/danish.txt | 3 - src/lang/dutch.txt | 3 - src/lang/english.txt | 10 +- src/lang/english_AU.txt | 3 - src/lang/english_US.txt | 3 - src/lang/esperanto.txt | 3 - src/lang/estonian.txt | 3 - src/lang/faroese.txt | 3 - src/lang/finnish.txt | 3 - src/lang/french.txt | 3 - src/lang/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/hungarian.txt | 3 - src/lang/icelandic.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/malay.txt | 3 - src/lang/norwegian_bokmal.txt | 3 - src/lang/norwegian_nynorsk.txt | 3 - src/lang/polish.txt | 3 - src/lang/portuguese.txt | 3 - src/lang/romanian.txt | 3 - src/lang/russian.txt | 3 - src/lang/serbian.txt | 3 - src/lang/simplified_chinese.txt | 3 - src/lang/slovak.txt | 3 - src/lang/slovenian.txt | 3 - src/lang/spanish.txt | 3 - src/lang/spanish_MX.txt | 3 - src/lang/swedish.txt | 3 - src/lang/tamil.txt | 3 - src/lang/thai.txt | 3 - src/lang/traditional_chinese.txt | 3 - src/lang/turkish.txt | 3 - src/lang/ukrainian.txt | 3 - src/lang/unfinished/chuvash.txt | 1 - src/lang/unfinished/frisian.txt | 3 - src/lang/unfinished/macedonian.txt | 2 - src/lang/unfinished/marathi.txt | 3 - src/lang/unfinished/persian.txt | 3 - src/lang/unfinished/urdu.txt | 3 - src/lang/vietnamese.txt | 3 - src/lang/welsh.txt | 3 - src/screenshot_gui.cpp | 103 ++++++++++++++++++ src/screenshot_gui.h | 15 +++ src/script/api/game/game_window.hpp.sq | 6 + src/script/api/script_window.hpp | 17 +++ .../api/template/template_window.hpp.sq | 2 + src/toolbar_gui.cpp | 41 +++---- src/widgets/screenshot_widget.h | 25 +++++ src/window_type.h | 6 + 77 files changed, 273 insertions(+), 207 deletions(-) create mode 100644 src/screenshot_gui.cpp create mode 100644 src/screenshot_gui.h create mode 100644 src/widgets/screenshot_widget.h diff --git a/projects/openttd_vs140.vcxproj b/projects/openttd_vs140.vcxproj index 070a3a144d..6c4bef5cea 100644 --- a/projects/openttd_vs140.vcxproj +++ b/projects/openttd_vs140.vcxproj @@ -409,6 +409,7 @@ + @@ -625,8 +626,10 @@ + + @@ -845,6 +848,7 @@ + @@ -1326,6 +1330,7 @@ + @@ -1333,6 +1338,7 @@ + diff --git a/projects/openttd_vs140.vcxproj.filters b/projects/openttd_vs140.vcxproj.filters index 5476d40f81..45753b1b6d 100644 --- a/projects/openttd_vs140.vcxproj.filters +++ b/projects/openttd_vs140.vcxproj.filters @@ -315,6 +315,9 @@ Source Files + + Source Files + Source Files @@ -963,12 +966,18 @@ Header Files + + Header Files + Header Files Header Files + + Header Files + Header Files @@ -1623,6 +1632,9 @@ Widgets + + Widgets + Widgets @@ -3066,6 +3078,9 @@ Video + + Video + Video @@ -3087,6 +3102,9 @@ Sound + + Sound + Sound diff --git a/projects/openttd_vs141.vcxproj b/projects/openttd_vs141.vcxproj index 6fd1388c9b..a59eec0c64 100644 --- a/projects/openttd_vs141.vcxproj +++ b/projects/openttd_vs141.vcxproj @@ -409,6 +409,7 @@ + @@ -625,8 +626,10 @@ + + @@ -845,6 +848,7 @@ + @@ -1326,6 +1330,7 @@ + @@ -1333,6 +1338,7 @@ + diff --git a/projects/openttd_vs141.vcxproj.filters b/projects/openttd_vs141.vcxproj.filters index 5476d40f81..45753b1b6d 100644 --- a/projects/openttd_vs141.vcxproj.filters +++ b/projects/openttd_vs141.vcxproj.filters @@ -315,6 +315,9 @@ Source Files + + Source Files + Source Files @@ -963,12 +966,18 @@ Header Files + + Header Files + Header Files Header Files + + Header Files + Header Files @@ -1623,6 +1632,9 @@ Widgets + + Widgets + Widgets @@ -3066,6 +3078,9 @@ Video + + Video + Video @@ -3087,6 +3102,9 @@ Sound + + Sound + Sound diff --git a/projects/openttd_vs142.vcxproj b/projects/openttd_vs142.vcxproj index a591a9dc3c..ce5244eb97 100644 --- a/projects/openttd_vs142.vcxproj +++ b/projects/openttd_vs142.vcxproj @@ -409,6 +409,7 @@ + @@ -625,8 +626,10 @@ + + @@ -845,6 +848,7 @@ + @@ -1326,6 +1330,7 @@ + @@ -1333,6 +1338,7 @@ + diff --git a/projects/openttd_vs142.vcxproj.filters b/projects/openttd_vs142.vcxproj.filters index 5476d40f81..45753b1b6d 100644 --- a/projects/openttd_vs142.vcxproj.filters +++ b/projects/openttd_vs142.vcxproj.filters @@ -315,6 +315,9 @@ Source Files + + Source Files + Source Files @@ -963,12 +966,18 @@ Header Files + + Header Files + Header Files Header Files + + Header Files + Header Files @@ -1623,6 +1632,9 @@ Widgets + + Widgets + Widgets @@ -3066,6 +3078,9 @@ Video + + Video + Video @@ -3087,6 +3102,9 @@ Sound + + Sound + Sound diff --git a/source.list b/source.list index 510afcc73a..a395970f73 100644 --- a/source.list +++ b/source.list @@ -70,6 +70,7 @@ rail.cpp rev.cpp road.cpp roadstop.cpp +screenshot_gui.cpp screenshot.cpp settings.cpp signal.cpp @@ -312,6 +313,7 @@ roadstop_base.h roadveh.h safeguards.h screenshot.h +screenshot_gui.h sound/sdl_s.h video/sdl_v.h video/sdl2_v.h @@ -555,6 +557,7 @@ widgets/order_widget.h widgets/osk_widget.h widgets/rail_widget.h widgets/road_widget.h +widgets/screenshot_widget.h widgets/settings_widget.h widgets/sign_widget.h widgets/smallmap_widget.h diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index bf30bdc8ad..4e50215d81 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -471,9 +471,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Skakel terminaal STR_ABOUT_MENU_AI_DEBUG :AI/Spel skript ontfout STR_ABOUT_MENU_SCREENSHOT :Skermskoot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ten volle vergrote skermskoot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Basiese groote skermskoot -STR_ABOUT_MENU_GIANT_SCREENSHOT :Hele kaart Skermkiekie (Ctrl+G) STR_ABOUT_MENU_ABOUT_OPENTTD :Oor 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :"Sprite" rigter STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :skakel beperkte bokse diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index b49778ae1b..2c833b8fd7 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -446,9 +446,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :توقل كونسول STR_ABOUT_MENU_AI_DEBUG :مكتشف اخطاء الذكاء الصناعي STR_ABOUT_MENU_SCREENSHOT :صورة من الشاشة - Ctrl-S - -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :صورة للشاشة مصغرة -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :تقريب الشاشة القياسي -STR_ABOUT_MENU_GIANT_SCREENSHOT :صورة كبيرة لكامل الخريطة -Ctrl-G - STR_ABOUT_MENU_ABOUT_OPENTTD :حول 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :موائم العفريتات STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :اضهار /اخفاء مربح الحوارات/الخيارات diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 4f817e8052..9f8ba074a0 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -464,9 +464,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsola aktibatu STR_ABOUT_MENU_AI_DEBUG :IA/Joko script-aren garbitzailea STR_ABOUT_MENU_SCREENSHOT :Pantailan dagoenaren argazkia hartu (Ctrl+S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pantailan dagoenaren argazkia hartu zoom-a guztiz erabiliz -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :zoom lehenetsikoarekin pantaila-argazkia -STR_ABOUT_MENU_GIANT_SCREENSHOT :Mapa osoaren argazkia hartu (Ctrl+G) STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'-ri buruz STR_ABOUT_MENU_SPRITE_ALIGNER :"Sprit" lerrokatzailea STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Kaxen neurriak aldatu diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 8293e9f999..b645648610 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -783,9 +783,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Кансоль STR_ABOUT_MENU_AI_DEBUG :Наладка штучнага інтэлекту (ШІ/AI) / скрыптоў STR_ABOUT_MENU_SCREENSHOT :Здымак экрана (Ctrl+S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Здымак экрана ў макс. набліжэньні -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Павялiчаны здымак экрана па змоўчаньнi -STR_ABOUT_MENU_GIANT_SCREENSHOT :Здымак усёй мапы (Ctrl+G) STR_ABOUT_MENU_ABOUT_OPENTTD :Аб гульні OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Выраўноўваньне спрайтаў STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Пераключыць абмежавальныя рамкі diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 9ab5e03feb..42ececa0e9 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -471,9 +471,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Alternar console STR_ABOUT_MENU_AI_DEBUG :Depurar IA/Script do jogo STR_ABOUT_MENU_SCREENSHOT :Captura de tela -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ampliado em captura de tela -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura de tela em ampliação padrão -STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de tela do mapa inteiro STR_ABOUT_MENU_SHOW_FRAMERATE :Exibir taxa de quadros STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de "sprites" diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index ed3ef49fee..bc882bb523 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -471,9 +471,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Показване/скриване на конзола STR_ABOUT_MENU_AI_DEBUG :ИИ дебъг STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Напълно увеличен в кадъра. -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Увеличение по подразбиране -STR_ABOUT_MENU_GIANT_SCREENSHOT :Огромен Screenshot STR_ABOUT_MENU_SHOW_FRAMERATE :Показване на честотата на кадрите STR_ABOUT_MENU_ABOUT_OPENTTD :Относно 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Подравнител на спрайтове diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index fb3346e0ea..65b3308f67 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -474,9 +474,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Commuta la consola STR_ABOUT_MENU_AI_DEBUG :Depuració de les IA i l'script de partida STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura de pantalla amb el zoom màxim -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura de pantalla amb el zoom predeterminat -STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de pantalla de tot el mapa STR_ABOUT_MENU_SHOW_FRAMERATE :Mostra els fotogrames per segon STR_ABOUT_MENU_ABOUT_OPENTTD :Quant a l'OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Alineador de sprites diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 3e099abba1..a23f3b9856 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -574,9 +574,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Otvori konzolu STR_ABOUT_MENU_AI_DEBUG :Debugiranje UI-ja/Skripte igre STR_ABOUT_MENU_SCREENSHOT :Slika zaslona -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zumirano do kraja na slici zaslona -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standardno zumiranje slike zaslona -STR_ABOUT_MENU_GIANT_SCREENSHOT :Slika zaslona cijele karte STR_ABOUT_MENU_SHOW_FRAMERATE :Prikaži broj sličica u sekundi STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnanje spritea diff --git a/src/lang/czech.txt b/src/lang/czech.txt index b42c0a84aa..ef10311dc7 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -553,9 +553,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobrazit nebo skrýt konzoli STR_ABOUT_MENU_AI_DEBUG :Ladění AI / herních skriptů STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot v plném přiblížení -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot ve výchozím přiblížení -STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot celé mapy STR_ABOUT_MENU_SHOW_FRAMERATE :Zobrazit počet snímků za sekundu STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Zarovnávání spritů diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 4256899e4f..1a018f7b0c 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -474,9 +474,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Tænd/Sluk konsol STR_ABOUT_MENU_AI_DEBUG :Computerspiller/spilscript debug STR_ABOUT_MENU_SCREENSHOT :Skærmbillede (Ctrl-S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fuldt zoomet skærmbillede -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard zoom skærmbillede -STR_ABOUT_MENU_GIANT_SCREENSHOT :Kæmpe skærmbillede (Ctrl-G) STR_ABOUT_MENU_SHOW_FRAMERATE :Vis spilhastighed STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Spritejustering diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 23ec3742de..8cb39feabb 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Console in-uitschakelen STR_ABOUT_MENU_AI_DEBUG :Probleemoplossing AI/spelscript STR_ABOUT_MENU_SCREENSHOT :Schermfoto -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ingezoomde schermfoto -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Schermfoto met standaardzoom -STR_ABOUT_MENU_GIANT_SCREENSHOT :Schermfoto van de hele kaart STR_ABOUT_MENU_SHOW_FRAMERATE :Framesnelheid weergeven STR_ABOUT_MENU_ABOUT_OPENTTD :Over 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-uitlijner diff --git a/src/lang/english.txt b/src/lang/english.txt index 1b4069d0f3..4fd97c5397 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fully zoomed in screenshot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot -STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot STR_ABOUT_MENU_SHOW_FRAMERATE :Show frame rate STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner @@ -4179,6 +4176,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Select h STR_AI_LIST_CANCEL :{BLACK}Cancel STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script +STR_SCREENSHOT_CAPTION :{WHITE}Take a screenshot +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normal screenshot +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Fully zoomed in screenshot +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Default zoom screenshot +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole map screenshot +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 9f7eea532d..c738158e7c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -461,9 +461,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zoomed in screenshot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot -STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Toggle bounding boxes diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 19e94d21c0..57622f08c9 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toggle console STR_ABOUT_MENU_AI_DEBUG :AI/Game script debug STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fully zoomed in screenshot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Default zoom screenshot -STR_ABOUT_MENU_GIANT_SCREENSHOT :Whole map screenshot STR_ABOUT_MENU_SHOW_FRAMERATE :Show frame rate STR_ABOUT_MENU_ABOUT_OPENTTD :About 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index 9a415bb124..f54548455e 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -464,9 +464,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Baskuligi Konzolon STR_ABOUT_MENU_AI_DEBUG :AI/Ludo skripto sencimigo STR_ABOUT_MENU_SCREENSHOT :Ekranfoto -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pligrandiga ekranfoto -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Ekranfoto defaŭlte zoma -STR_ABOUT_MENU_GIANT_SCREENSHOT :Tuta karto ekranfoto STR_ABOUT_MENU_ABOUT_OPENTTD :Pri 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Bildeto-liniigilo STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Montri/ne montri limigujo diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index 4580752096..d562ea85bd 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -527,9 +527,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Lülita konsool sisse/välja STR_ABOUT_MENU_AI_DEBUG :Arvutivea otsing STR_ABOUT_MENU_SCREENSHOT :Ekraanitõmmis -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suurendatud ekraanitõmmis -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Tavasuurendusega ekraanitõmmis -STR_ABOUT_MENU_GIANT_SCREENSHOT :Terve kaardi ekraanitõmmis STR_ABOUT_MENU_SHOW_FRAMERATE :Näita kaadrisagedust STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' kohta STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 813b27eecf..296a2824a2 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -448,9 +448,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Console opið ella lukka STR_ABOUT_MENU_AI_DEBUG :AI/Spæl script debug STR_ABOUT_MENU_SCREENSHOT :Skermmynd -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Suma in skermmynd -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Vanliga suma skermmynd -STR_ABOUT_MENU_GIANT_SCREENSHOT :Skermmynd av øllum kortinum STR_ABOUT_MENU_SHOW_FRAMERATE :Vís mynda títtleika STR_ABOUT_MENU_ABOUT_OPENTTD :Um 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite aligner diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index aa3d8f9650..df71075efd 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsoli STR_ABOUT_MENU_AI_DEBUG :Tekoälyn/peliskriptin virheenjäljitys STR_ABOUT_MENU_SCREENSHOT :Kuvakaappaus -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Täysin lähennetty kuvakaappaus -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Kuvakaappaus oletuslähennystasolla -STR_ABOUT_MENU_GIANT_SCREENSHOT :Koko kartan kuvakaappaus STR_ABOUT_MENU_SHOW_FRAMERATE :Näytä kuvataajuus STR_ABOUT_MENU_ABOUT_OPENTTD :Tietoja OpenTTD:stä STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-kohdistaja diff --git a/src/lang/french.txt b/src/lang/french.txt index 5608354138..bf4f6bfd83 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Afficher/Cacher la console STR_ABOUT_MENU_AI_DEBUG :Débogage de scripts STR_ABOUT_MENU_SCREENSHOT :Copie d'écran -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Copie d'écran au zoom maximum -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Copie d'écran au zoom par défaut -STR_ABOUT_MENU_GIANT_SCREENSHOT :Copie d'écran de la carte entière STR_ABOUT_MENU_SHOW_FRAMERATE :Afficher la fréquence d'images STR_ABOUT_MENU_ABOUT_OPENTTD :À propos d'OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Alignement de sprite diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 565b08748a..16568a5497 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -658,9 +658,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toglaich a' chonsoil STR_ABOUT_MENU_AI_DEBUG :Dì-bhugaich IF/sgriobt geama STR_ABOUT_MENU_SCREENSHOT :Glacadh-sgrìn -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Glacadh-sgrìn le sùmadh a-steach as motha -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Glacadh-sgrìn le sùmadh a-steach bunaiteach -STR_ABOUT_MENU_GIANT_SCREENSHOT :Glacadh-sgrìn leis a' mhapa shlàn STR_ABOUT_MENU_ABOUT_OPENTTD :Mu dheidhinn “OpenTTD" STR_ABOUT_MENU_SPRITE_ALIGNER :Co-thaobhaichear nan sprite STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Toglaich bogsaichean-iadhaidh diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 0423a415ae..9591d91bcb 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :(Des)Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración IA/script do xogo STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Achegar área capturada -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zoom de captura de pantalla por defecto -STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de pantalla do mapa completo STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar frame rate STR_ABOUT_MENU_ABOUT_OPENTTD :Acerca de 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Aliñador de sprites diff --git a/src/lang/german.txt b/src/lang/german.txt index e194fc2e59..769d393ceb 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -473,9 +473,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsole öffnen/schließen STR_ABOUT_MENU_AI_DEBUG :KI / Skript-Debug STR_ABOUT_MENU_SCREENSHOT :Screenshot (Standard: Strg+S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot in Nahaufnahme -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot mit normalem Zoom -STR_ABOUT_MENU_GIANT_SCREENSHOT :Riesiger Screenshot (Standard: Strg+G) STR_ABOUT_MENU_SHOW_FRAMERATE :Bildwiederholrate anzeigen STR_ABOUT_MENU_ABOUT_OPENTTD :Über OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite-Ausrichtung diff --git a/src/lang/greek.txt b/src/lang/greek.txt index efcc33e14b..884c1c843d 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -534,9 +534,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Εναλλαγή κονσόλας STR_ABOUT_MENU_AI_DEBUG :Αποσφαλμάτωση AI και δέσμης ενεργειών παιχνιδιού STR_ABOUT_MENU_SCREENSHOT :Στιγμιότυπο οθόνης -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Στιγμιότυπο οθόνης μέγιστης μεγέθυνσης -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Στιγμιότυπο οθόνης τυπικής μεγέθυνσης -STR_ABOUT_MENU_GIANT_SCREENSHOT :Στιγμιότυπο οθόνης για ολό τον χάρτη STR_ABOUT_MENU_SHOW_FRAMERATE :Εμφάνιση ρυθμού καρέ STR_ABOUT_MENU_ABOUT_OPENTTD :Σχετικά με το 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Ευθυγραμμιστής στοιχεών diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 00f29a7a19..9877e16679 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -484,9 +484,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :פתח/סגור קונסולה STR_ABOUT_MENU_AI_DEBUG :דיבאג של סקריפטים של בינה מלאכותית או של המשחק STR_ABOUT_MENU_SCREENSHOT :צילום מסך -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :צילום מסך בהגדלה מלאה -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :ברירת מחדל של תקריב צילום מסך -STR_ABOUT_MENU_GIANT_SCREENSHOT :צילום מסך ענק STR_ABOUT_MENU_SHOW_FRAMERATE :הצג קצב פריימים STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'{NBSP}אודות STR_ABOUT_MENU_SPRITE_ALIGNER :מיישר ספרייטים diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index d4e8d0f2ec..ab3c032931 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -541,9 +541,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Átváltás konzolra STR_ABOUT_MENU_AI_DEBUG :MI / Játékszkript nyomkövetés STR_ABOUT_MENU_SCREENSHOT :Képmentés -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Teljes nagyítású képmentés -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Alapértelmezett nagyítású képmentés -STR_ABOUT_MENU_GIANT_SCREENSHOT :Képmentés teljes térképről STR_ABOUT_MENU_SHOW_FRAMERATE :FPS ablak STR_ABOUT_MENU_ABOUT_OPENTTD :Az 'OpenTTD'-ről STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite elhelyező diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 48de9cd774..34693b804e 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -448,9 +448,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Kveikja á stýriskjá STR_ABOUT_MENU_AI_DEBUG :Aflúsun gervigreindar/forskrifta STR_ABOUT_MENU_SCREENSHOT :Skjámynd -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Súmuð inn skjáskot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Taka skjáskot af súmi -STR_ABOUT_MENU_GIANT_SCREENSHOT :Risa skjámynd STR_ABOUT_MENU_ABOUT_OPENTTD :Um 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Samstilla hreyfimynd STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Sýna/fela afmörkunar kassa diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 4642ce4feb..4889dcb18e 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -472,9 +472,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Hidup/matikan Layar Konsol STR_ABOUT_MENU_AI_DEBUG :Debug skrip AI STR_ABOUT_MENU_SCREENSHOT :Ambil gambar -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ambil gambar dengan diperbesar -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Ambil gambar dengan perbesaran normal -STR_ABOUT_MENU_GIANT_SCREENSHOT :Ambil gambar keseluruhan peta STR_ABOUT_MENU_SHOW_FRAMERATE :Tampilkan laju bingkai STR_ABOUT_MENU_ABOUT_OPENTTD :Tentang 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Penjajar Sprite diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 35830743f1..1e0cb7b6cc 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Scoránaigh consól STR_ABOUT_MENU_AI_DEBUG :Dífhabhtú AI/Scripteanna Cluiche STR_ABOUT_MENU_SCREENSHOT :Seat scáileáin -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Seat scáileáin zúmáilte isteach go hiomlán -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Seat scáileáin le zúm réamhshocraithe -STR_ABOUT_MENU_GIANT_SCREENSHOT :Seat scáileáin den léarscáil ar fad STR_ABOUT_MENU_ABOUT_OPENTTD :Maidir le 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Ailínóir spriteanna STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Scoránaigh boscaí imill diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 47d4414614..4ea278a830 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -480,9 +480,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Apri/chiudi console STR_ABOUT_MENU_AI_DEBUG :Debug IA/Script STR_ABOUT_MENU_SCREENSHOT :Screenshot -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Screenshot con zoom massimo -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Screenshot con zoom predefinito -STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot intera mappa STR_ABOUT_MENU_SHOW_FRAMERATE :Mostra frame rate STR_ABOUT_MENU_ABOUT_OPENTTD :Informazioni su 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Strumento allineamento sprite diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 8c32715c71..64d6ee52db 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR :――――― STR_ABOUT_MENU_TOGGLE_CONSOLE :コンソールの表示切替 STR_ABOUT_MENU_AI_DEBUG :AI/ゲームスクリプトのデバッグ STR_ABOUT_MENU_SCREENSHOT :スクリーンショット撮影(現在のズーム) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :スクリーンショット撮影(最大ズーム) -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :スクリーンショット撮影(標準ズーム) -STR_ABOUT_MENU_GIANT_SCREENSHOT :スクリーンショット撮影(マップ全体) STR_ABOUT_MENU_ABOUT_OPENTTD :OpenTTDについて STR_ABOUT_MENU_SPRITE_ALIGNER :スプライトを整列 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :バウンディングボックスの表示切替 diff --git a/src/lang/korean.txt b/src/lang/korean.txt index dda1204ca4..6166ac2a1e 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :콘솔 켜기/끄기 STR_ABOUT_MENU_AI_DEBUG :인공지능/게임 스크립트 디버그 STR_ABOUT_MENU_SCREENSHOT :스크린샷 찍기 -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :스크린샷 찍기 (지금 보고 있는 영역) -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :스크린샷 찍기 (창을 제외한 게임 화면만) -STR_ABOUT_MENU_GIANT_SCREENSHOT :스크린샷 찍기 (지도 전체) STR_ABOUT_MENU_SHOW_FRAMERATE :프레임레이트 보기 STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD'에 대해서 STR_ABOUT_MENU_SPRITE_ALIGNER :스프라이트 정렬도구 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 23fe40a358..665320dce3 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -661,9 +661,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Monstrare celareve consolam STR_ABOUT_MENU_AI_DEBUG :Emendatio IA/Ludi scriptorum STR_ABOUT_MENU_SCREENSHOT :Imago conspectus -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Imago conspectus maxime amplificata -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Imago conspectus solite amplificata -STR_ABOUT_MENU_GIANT_SCREENSHOT :Imago cunctae tabulae geographicae STR_ABOUT_MENU_ABOUT_OPENTTD :De 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Norma spiritus STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Monstrare celareve arcas finitionum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 1fb3bff1be..31e111cb15 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Atvērt/aizvērt konsoli STR_ABOUT_MENU_AI_DEBUG :MI/spēles skriptu atkļūdošana STR_ABOUT_MENU_SCREENSHOT :Ekrānuzņēmums -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Pilnībā pietuvināts ekrānuzņēmums -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Noklusējuma mēroga ekrānuzņēmums -STR_ABOUT_MENU_GIANT_SCREENSHOT :Visas kartes ekrānuzņēmums STR_ABOUT_MENU_SHOW_FRAMERATE :Rādīt kadru ātrumu STR_ABOUT_MENU_ABOUT_OPENTTD :Par 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Gariņu līdzinātājs diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 9deca5c1e0..07e589c50b 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -665,9 +665,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Perjungti konsolę STR_ABOUT_MENU_AI_DEBUG :AI / GameScript derinimas STR_ABOUT_MENU_SCREENSHOT :Ekrano nuotrauka -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ekrano nuotrauka iš arti -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Nepriartintas ekrano vaizdas -STR_ABOUT_MENU_GIANT_SCREENSHOT :Fotografuoti viso ekrano vaizdą STR_ABOUT_MENU_ABOUT_OPENTTD :Apie „OpenTTD“ STR_ABOUT_MENU_SPRITE_ALIGNER :Spruklių lygiuoklė STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Rodyti/slėpti apvadus diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 8f6457be57..4e5ae1d5cf 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -473,9 +473,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsole un/aus STR_ABOUT_MENU_AI_DEBUG :KI / Spill-Script Debug STR_ABOUT_MENU_SCREENSHOT :Screenshot (Ctrl+S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Voll eragezoomte Screenshot -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standard Zoom Screenshot -STR_ABOUT_MENU_GIANT_SCREENSHOT :Screenshot vun der ganzer Kaart STR_ABOUT_MENU_SHOW_FRAMERATE :Biller pro Sekonn uweisen STR_ABOUT_MENU_ABOUT_OPENTTD :Iwwert 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite Alignéirer diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 3a00bac589..f501163ded 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -452,9 +452,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Papar atau padamkan konsol STR_ABOUT_MENU_AI_DEBUG :Al/Skrip pepijat permainan STR_ABOUT_MENU_SCREENSHOT :Tangkapan skrin (Ctrl+S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zum sepenuhnya di pembidik skrin -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Tangkapan skrin di zum asal -STR_ABOUT_MENU_GIANT_SCREENSHOT :Tangkap gambar skrin besar (Ctrl+G) STR_ABOUT_MENU_ABOUT_OPENTTD :Tentang 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Penjajar peperi STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Papar atau padamkan kotak diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index cd2b797863..78cf30ab20 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -480,9 +480,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Vis/skjul konsoll STR_ABOUT_MENU_AI_DEBUG :AI/Spillskript-feilsøking STR_ABOUT_MENU_SCREENSHOT :Skjermbilde -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fullt forstørret skjermbilde -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Normalt forstørret skjermbilde -STR_ABOUT_MENU_GIANT_SCREENSHOT :Skjermbilde av hele kartet STR_ABOUT_MENU_SHOW_FRAMERATE :Vis bildehastighet STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Spriteforskyver diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 1ed23d682a..6771d47bcd 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -472,9 +472,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Syne/gøym konsoll STR_ABOUT_MENU_AI_DEBUG :AI- / Spelscriptfeilsøking STR_ABOUT_MENU_SCREENSHOT :Skjermdump -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fullt forstørra skjermbilete -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Normalt skjermbilete -STR_ABOUT_MENU_GIANT_SCREENSHOT :Stort skjermfoto STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Spriteforskyver STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Syne/gøym markeringsramme diff --git a/src/lang/polish.txt b/src/lang/polish.txt index e7c1356969..f96658d64f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -857,9 +857,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Przełącz konsolę STR_ABOUT_MENU_AI_DEBUG :Debugowanie SI / Game Script STR_ABOUT_MENU_SCREENSHOT :Zrzut ekranu -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zrzut ekranu z pełnym przybliżeniem -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zrzut ekranu z przybliżeniem domyślnym -STR_ABOUT_MENU_GIANT_SCREENSHOT :Zrzut ekranu całej mapy STR_ABOUT_MENU_SHOW_FRAMERATE :Pokaż ilość klatek na sekundę STR_ABOUT_MENU_ABOUT_OPENTTD :Info o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Wyrównywanie sprite'ów diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index cfb33fc8eb..9d1df78efb 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -477,9 +477,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Mostrar/Ocultar consola STR_ABOUT_MENU_AI_DEBUG :Depuração da IA/Scripts de jogo STR_ABOUT_MENU_SCREENSHOT :Captura de ecrã -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura com resolução máxima -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura com resolução normal -STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar taxa de fotogramas STR_ABOUT_MENU_ABOUT_OPENTTD :Sobre o 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alinhador de gráficos diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 46e128164c..ce2f35c0c6 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Consolă pornit/oprit STR_ABOUT_MENU_AI_DEBUG :Depanare Inteligenţă Artificială / Script Joc STR_ABOUT_MENU_SCREENSHOT :Capturează ecranul -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captură mărită -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Mărimea implicită a capturii -STR_ABOUT_MENU_GIANT_SCREENSHOT :Capturează toată harta STR_ABOUT_MENU_SHOW_FRAMERATE :Arată FPS STR_ABOUT_MENU_ABOUT_OPENTTD :Despre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Aliniere imagini diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 37601dcf4e..3699f620ac 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -604,9 +604,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Консоль STR_ABOUT_MENU_AI_DEBUG :Отладка ИИ / скриптов STR_ABOUT_MENU_SCREENSHOT :Снимок экрана -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Снимок экрана в макс. приближении -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Снимок экрана в обычном масштабе -STR_ABOUT_MENU_GIANT_SCREENSHOT :Снимок всей карты STR_ABOUT_MENU_SHOW_FRAMERATE :Информация о скорости игры STR_ABOUT_MENU_ABOUT_OPENTTD :Об игре STR_ABOUT_MENU_SPRITE_ALIGNER :Выравнивание спрайтов diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index bd12d84c99..2b19ec5d04 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -658,9 +658,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Uključi/isključi konzolu STR_ABOUT_MENU_AI_DEBUG :Korekcija veštačke inteligencije / skripte partije STR_ABOUT_MENU_SCREENSHOT :Sačuvaj sliku -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Čuva sliku skroz približenog terena -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Podrazumevani nivo zuma za sliku ekrana -STR_ABOUT_MENU_GIANT_SCREENSHOT :Sačuvaj sliku celog terena STR_ABOUT_MENU_ABOUT_OPENTTD :O OpenTTD-u STR_ABOUT_MENU_SPRITE_ALIGNER :Poravnjavanje sprajta STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Uključi/isključi granične linije diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 2a2f69738a..727ecd038e 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :切换到控制台模式 STR_ABOUT_MENU_AI_DEBUG :AI /游戏脚本调试 STR_ABOUT_MENU_SCREENSHOT :屏幕截图 -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :高清截图 -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :默认缩放模式下的屏幕截图 -STR_ABOUT_MENU_GIANT_SCREENSHOT :全地图截图 STR_ABOUT_MENU_SHOW_FRAMERATE :显示帧率 STR_ABOUT_MENU_ABOUT_OPENTTD :关于 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite 对齐 diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 66bbf080b6..893ef55688 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -534,9 +534,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Zobraziť / skryť konzolu STR_ABOUT_MENU_AI_DEBUG :Umelá inteligencia / Ladenie skriptov STR_ABOUT_MENU_SCREENSHOT :Snímka -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Plne priblížená snímka -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Snímka s predvoleným priblížením -STR_ABOUT_MENU_GIANT_SCREENSHOT :Veľká snímka celej mapy STR_ABOUT_MENU_ABOUT_OPENTTD :O hre 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Sprite zarovnávač STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Prepnúť okrajové boxy diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index fb6ad03cd8..6f2fa64d91 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -623,9 +623,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Vklopi/Izklopi konzolo STR_ABOUT_MENU_AI_DEBUG :Razhročevanje UI / skript STR_ABOUT_MENU_SCREENSHOT :Zajemi sliko -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Zajemi približano sliko -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Zajem slike pri privzeti povečavi -STR_ABOUT_MENU_GIANT_SCREENSHOT :Zajemi celostno sliko STR_ABOUT_MENU_ABOUT_OPENTTD :O 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Uravnavanje sličice STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Vklop/izklop okvirjev diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index b04d8dbf8e..bc92c15e6d 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración de Script de Juego / IA STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura con zoom de cerca -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura con zoom por defecto -STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa completo STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar fotogramas por segundo - FPS STR_ABOUT_MENU_ABOUT_OPENTTD :Acerca de 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Alineador de sprites diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 4b537ba7c0..72047c6632 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -479,9 +479,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Activar consola STR_ABOUT_MENU_AI_DEBUG :Depuración de scripts de IA o juego STR_ABOUT_MENU_SCREENSHOT :Captura de pantalla -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Captura con acercamiento completo -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Captura con acercamiento predeterminado -STR_ABOUT_MENU_GIANT_SCREENSHOT :Captura de mapa completo STR_ABOUT_MENU_SHOW_FRAMERATE :Mostrar FPS STR_ABOUT_MENU_ABOUT_OPENTTD :Acerca de OpenTTD STR_ABOUT_MENU_SPRITE_ALIGNER :Alineador de sprites diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 7881727d71..e5cbf27dda 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Visa/dölj konsolen STR_ABOUT_MENU_AI_DEBUG :Felsökning av AI / spelskript STR_ABOUT_MENU_SCREENSHOT :Skärmdump -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Fullt inzoomad skärmdump -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Normalt inzoomad skärmdump -STR_ABOUT_MENU_GIANT_SCREENSHOT :Skärmdump av hela kartan STR_ABOUT_MENU_SHOW_FRAMERATE :Visa bildfrekvens STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Justering av spriteobjekt diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 3634865098..83decab0d7 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -468,9 +468,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :முனையத்தை மாற்று STR_ABOUT_MENU_AI_DEBUG :AI/வரிவடிவம் சரிபார் STR_ABOUT_MENU_SCREENSHOT :திரைபிடிப்பு -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :முழுமையாக பெரிதாக்கிய நிலையில் திரைப்பிடிப்பு செய் -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :பெரிதாக்கிய நிலையில் திரைப்பிடிப்பு செய் -STR_ABOUT_MENU_GIANT_SCREENSHOT :முழு வரைபடத்தையும் திரைபிடிப்பு செய் STR_ABOUT_MENU_SHOW_FRAMERATE :பிரேம் வீதத்தைக் காட்டு STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' பற்றி STR_ABOUT_MENU_SPRITE_ALIGNER :ஸ்ரைட்டு அலைனர் diff --git a/src/lang/thai.txt b/src/lang/thai.txt index a17f625bb6..19b68af5ce 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -462,9 +462,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :เปิด/ปิด คอนโซล STR_ABOUT_MENU_AI_DEBUG :ดีบัก สคริปต์ AI/Game STR_ABOUT_MENU_SCREENSHOT :จับภาพหน้าจอ (Ctrl+S) -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :จับภาพหน้าจอในแบบขยายใหญ่สุด -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :ค่าเริ่มต้นของการขยายภาพในการจับหน้าจอ -STR_ABOUT_MENU_GIANT_SCREENSHOT :จับภาพหน้าจอทั้งแผนที่ (Ctrl+G) STR_ABOUT_MENU_ABOUT_OPENTTD :เกี่ยวกับ 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :ตัวจัดแนว Sprite STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :เปิด/ปิด bounding boxes diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index a1348c3030..5db0ef4fe3 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :切換主控台 STR_ABOUT_MENU_AI_DEBUG :AI/遊戲腳本除錯 STR_ABOUT_MENU_SCREENSHOT :擷取畫面 -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :最近鏡截圖 -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :在預設的縮放範圍截圖 -STR_ABOUT_MENU_GIANT_SCREENSHOT :擷取全場景畫面 STR_ABOUT_MENU_ABOUT_OPENTTD :關於「OpenTTD」 STR_ABOUT_MENU_SPRITE_ALIGNER :子畫面定位工具 STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :切換邊界框 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index b8e34b3ce7..06837b13ba 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -474,9 +474,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Konsolu aç/kapa STR_ABOUT_MENU_AI_DEBUG :YZ/Oyun betik hata ayıklama STR_ABOUT_MENU_SCREENSHOT :Ekran görüntüsü -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Tamamen yakınlaştırılmış ekran görüntüsü -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Varsayılan yakınlıkta ekran görüntüsü -STR_ABOUT_MENU_GIANT_SCREENSHOT :Tüm harita ekran görüntüsü STR_ABOUT_MENU_SHOW_FRAMERATE :Kare oranını göster STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' Hakkında STR_ABOUT_MENU_SPRITE_ALIGNER :Nesne hizalayıcı diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 54cbe37685..52cc7ec170 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -603,9 +603,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Вкл./відкл. консоль STR_ABOUT_MENU_AI_DEBUG :Налагодження АІ / Ігрового Скрипта STR_ABOUT_MENU_SCREENSHOT :Знімок екрану -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Знімок екрану з максимальним збільшенням -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Знімок екрану зі стандартним збільшенням -STR_ABOUT_MENU_GIANT_SCREENSHOT :Знімок всієї карти STR_ABOUT_MENU_SHOW_FRAMERATE :Швидкість генерації гри STR_ABOUT_MENU_ABOUT_OPENTTD :Про гру 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Вирівнювання спрайтів diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index cdca14b152..e908fde11f 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -272,7 +272,6 @@ STR_TOOLBAR_SOUND_MUSIC :Сасӑ/Юрӑ ############ range for about menu starts STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_SCREENSHOT :Экран сӑнӗ -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Яланхилле экран сӑнӗ STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' çинчен ############ range ends here diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index 355da5ceb8..ab78237492 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Skeakel console oan/ût STR_ABOUT_MENU_AI_DEBUG :AI/Gamescript debug STR_ABOUT_MENU_SCREENSHOT :Skermôfbylding -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Tichtby helle skermôfbylding -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Standerdzoom skermôfbylding -STR_ABOUT_MENU_GIANT_SCREENSHOT :Skermôfbylding fan 'e hiele wrâld STR_ABOUT_MENU_ABOUT_OPENTTD :Oer 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Flakken rjochtsje STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Skeakel seleksjekaders oan/út diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index c77747a4d5..6eea51de05 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -444,8 +444,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Вклучи конзола STR_ABOUT_MENU_AI_DEBUG :АИ / игри сценарио де-бубачки STR_ABOUT_MENU_SCREENSHOT :Слика од екранот -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Зумира екранот -STR_ABOUT_MENU_GIANT_SCREENSHOT :Целата сајтот екранот STR_ABOUT_MENU_ABOUT_OPENTTD :За 'ОтвориTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :самовила усогласат STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Вклучи одблеснува кутии diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index f6e6832ff3..fef9533eaf 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -436,9 +436,6 @@ STR_NEWS_MENU_MESSAGE_HISTORY_MENU :निरोप STR_ABOUT_MENU_LAND_BLOCK_INFO :जागाची माहिती STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_SCREENSHOT :द्श्य -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :द्श्य मोठे करा -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :स्थिर द्श्य -STR_ABOUT_MENU_GIANT_SCREENSHOT :संपूर्ण नकाशा स्क्रीनशॉट STR_ABOUT_MENU_ABOUT_OPENTTD :ओपेन टीटीडी बद्दल ############ range ends here diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 907d4deb35..320c29c6bc 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -459,9 +459,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :باز و بسته کردن کنسول STR_ABOUT_MENU_AI_DEBUG :خطایابی هوش مصنوعی STR_ABOUT_MENU_SCREENSHOT :تصویر از بازی -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :عکس از صفحه تمام بزرگنمایی شده -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :اندازه پیش فرض عکس برداری از صفحه -STR_ABOUT_MENU_GIANT_SCREENSHOT :تصویر از همه نقشه STR_ABOUT_MENU_ABOUT_OPENTTD :'OpenTTD' درباره STR_ABOUT_MENU_SPRITE_ALIGNER :تراز کردن تصویر گرافیکی STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :باز/بسته کردن محدوده جعبه ها diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 60b897192c..74c3dbece5 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -452,9 +452,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :حائطھ تدویم STR_ABOUT_MENU_AI_DEBUG :AI debug STR_ABOUT_MENU_SCREENSHOT :اسکرین کی تصویر -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :مکمل قریب سے اسکرین کی تصویر -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :پہلے سے طے شدہ قربت سے اسکرین کی تصویر -STR_ABOUT_MENU_GIANT_SCREENSHOT :پورے نقشے کی اسکرین کی تصویر STR_ABOUT_MENU_ABOUT_OPENTTD :Open TTD کے بارے میں STR_ABOUT_MENU_SPRITE_ALIGNER :sprite صف بندھ STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :احاطہ کرنے والے ڈبوں کی تدویم کیجئیے diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index ec481da973..1ab2a02544 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -478,9 +478,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Bật/tắt bảng lệnh STR_ABOUT_MENU_AI_DEBUG :Gỡ rối AI / Game script STR_ABOUT_MENU_SCREENSHOT :Ảnh chụp màn hình -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Phóng to đầy đủ ảnh chụp màn hình -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Phóng to mặc định ảnh chụp màn hình -STR_ABOUT_MENU_GIANT_SCREENSHOT :Ảnh màn hình toàn bản đồ STR_ABOUT_MENU_SHOW_FRAMERATE :Hiển thị tốc độ khung hình STR_ABOUT_MENU_ABOUT_OPENTTD :Giới thiệu 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Trình điều chỉnh sprite diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index d107bd82d5..8fd0a33a2e 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -470,9 +470,6 @@ STR_ABOUT_MENU_SEPARATOR : STR_ABOUT_MENU_TOGGLE_CONSOLE :Toglu Consol STR_ABOUT_MENU_AI_DEBUG :Dadnamu AI / Sgript Gêm STR_ABOUT_MENU_SCREENSHOT :Ciplun -STR_ABOUT_MENU_ZOOMIN_SCREENSHOT :Ciplun lefel mwyhád uchaf -STR_ABOUT_MENU_DEFAULTZOOM_SCREENSHOT :Ciplun pellter rhagosodedig -STR_ABOUT_MENU_GIANT_SCREENSHOT :Ciplun o'r map cyfan STR_ABOUT_MENU_ABOUT_OPENTTD :Gwybodaeth am 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Aliniwr corluniau STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Toglo bocsys ffinio diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp new file mode 100644 index 0000000000..bcbb93653e --- /dev/null +++ b/src/screenshot_gui.cpp @@ -0,0 +1,103 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + + /** @file screenshot_gui.cpp GUI functions related to screenshots. */ + +#include "stdafx.h" +#include "gui.h" +#include "viewport_func.h" +#include "window_func.h" +#include "window_gui.h" +#include "screenshot.h" +#include "textbuf_gui.h" + +#include "widgets/screenshot_widget.h" + +#include "table/strings.h" + +static ScreenshotType _screenshot_type; + +struct ScreenshotWindow : Window { + ScreenshotWindow(WindowDesc *desc) : Window(desc) { + this->CreateNestedTree(); + this->FinishInitNested(); + } + + void OnPaint() override { + this->DrawWidgets(); + } + + void OnClick(Point pt, int widget, int click_count) override { + if (widget < 0) return; + ScreenshotType st; + switch (widget) { + default: + case WID_SC_TAKE: st = SC_VIEWPORT; break; + case WID_SC_TAKE_ZOOMIN: st = SC_ZOOMEDIN; break; + case WID_SC_TAKE_DEFAULTZOOM: st = SC_DEFAULTZOOM; break; + case WID_SC_TAKE_WORLD: st = SC_WORLD; break; + case WID_SC_TAKE_HEIGHTMAP: st = SC_HEIGHTMAP; break; + } + TakeScreenshot(st); + } + + /** + * Make a screenshot. + * Ask for confirmation if the screenshot will be huge. + * @param t Screenshot type: World, defaultzoom, heightmap or viewport screenshot + */ + static void TakeScreenshot(ScreenshotType st) { + ViewPort vp; + SetupScreenshotViewport(st, &vp); + if ((uint64)vp.width * (uint64)vp.height > 8192 * 8192) { + /* Ask for confirmation */ + _screenshot_type = st; + ShowQuery(STR_WARNING_SCREENSHOT_SIZE_CAPTION, STR_WARNING_SCREENSHOT_SIZE_MESSAGE, nullptr, ScreenshotConfirmationCallback); + } + else { + /* Less than 64M pixels, just do it */ + MakeScreenshot(st, nullptr); + } + } + + /** + * Callback on the confirmation window for huge screenshots. + * @param w Window with viewport + * @param confirmed true on confirmation + */ + static void ScreenshotConfirmationCallback(Window *w, bool confirmed) { + if (confirmed) MakeScreenshot(_screenshot_type, nullptr); + } +}; + +static const NWidgetPart _nested_screenshot[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_GREY), + NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(STR_SCREENSHOT_CAPTION, 0), + NWidget(WWT_SHADEBOX, COLOUR_GREY), + NWidget(WWT_STICKYBOX, COLOUR_GREY), + EndContainer(), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_ZOOMIN), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_ZOOMIN_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_DEFAULTZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_HEIGHTMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + EndContainer(), +}; + +static WindowDesc _screenshot_window_desc( + WDP_AUTO, "take_a_screenshot", 200, 100, + WC_SCREENSHOT, WC_NONE, + 0, + _nested_screenshot, lengthof(_nested_screenshot) +); + +void ShowScreenshotWindow() { + DeleteWindowById(WC_SCREENSHOT, 0); + new ScreenshotWindow(&_screenshot_window_desc); +} diff --git a/src/screenshot_gui.h b/src/screenshot_gui.h new file mode 100644 index 0000000000..44a395edb1 --- /dev/null +++ b/src/screenshot_gui.h @@ -0,0 +1,15 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + + /** @file screenshot_gui.h GUI functions related to screenshots. */ + +#ifndef SCREENSHOT_GUI_H +#define SCREENSHOT_GUI_H + +void ShowScreenshotWindow(); + +#endif /* SCREENSHOT_GUI_H */ diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index be89676047..adc790ad9e 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -138,6 +138,7 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SAVE_PRESET, "WC_SAVE_PRESET"); SQGSWindow.DefSQConst(engine, ScriptWindow::WC_FRAMERATE_DISPLAY, "WC_FRAMERATE_DISPLAY"); SQGSWindow.DefSQConst(engine, ScriptWindow::WC_FRAMETIME_GRAPH, "WC_FRAMETIME_GRAPH"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WC_SCREENSHOT, "WC_SCREENSHOT"); SQGSWindow.DefSQConst(engine, ScriptWindow::WC_INVALID, "WC_INVALID"); SQGSWindow.DefSQConst(engine, ScriptWindow::TC_BLUE, "TC_BLUE"); SQGSWindow.DefSQConst(engine, ScriptWindow::TC_SILVER, "TC_SILVER"); @@ -1028,6 +1029,11 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_LT_OFF, "WID_BROS_LT_OFF"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_LT_ON, "WID_BROS_LT_ON"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_BROS_INFO, "WID_BROS_INFO"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SC_TAKE, "WID_SC_TAKE"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SC_TAKE_ZOOMIN, "WID_SC_TAKE_ZOOMIN"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SC_TAKE_DEFAULTZOOM, "WID_SC_TAKE_DEFAULTZOOM"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SC_TAKE_WORLD, "WID_SC_TAKE_WORLD"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_SC_TAKE_HEIGHTMAP, "WID_SC_TAKE_HEIGHTMAP"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_BACKGROUND, "WID_GO_BACKGROUND"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_CURRENCY_DROPDOWN, "WID_GO_CURRENCY_DROPDOWN"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_GO_DISTANCE_DROPDOWN, "WID_GO_DISTANCE_DROPDOWN"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 4efcc5bb6b..9847f543bc 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -52,6 +52,7 @@ #include "../../widgets/osk_widget.h" #include "../../widgets/rail_widget.h" #include "../../widgets/road_widget.h" +#include "../../widgets/screenshot_widget.h" #include "../../widgets/settings_widget.h" #include "../../widgets/sign_widget.h" #include "../../widgets/smallmap_widget.h" @@ -775,6 +776,12 @@ public: */ WC_FRAMETIME_GRAPH = ::WC_FRAMETIME_GRAPH, + /** + * Screenshot window; %Window numbers: + * - 0 = #ScreenshotWidgets + */ + WC_SCREENSHOT = ::WC_SCREENSHOT, + WC_INVALID = ::WC_INVALID, ///< Invalid window. }; @@ -2171,6 +2178,16 @@ public: WID_BROS_INFO = ::WID_BROS_INFO, ///< Station acceptance info. }; + /* automatically generated from ../../widgets/screenshot_widget.h */ + /** Widgets of the #ScreenshotWindow class. */ + enum ScreenshotWindowWidgets { + WID_SC_TAKE = ::WID_SC_TAKE, ///< Button for taking a normal screenshot + WID_SC_TAKE_ZOOMIN = ::WID_SC_TAKE_ZOOMIN, ///< Button for taking a zoomed in screenshot + WID_SC_TAKE_DEFAULTZOOM = ::WID_SC_TAKE_DEFAULTZOOM, ///< Button for taking a screenshot at normal zoom + WID_SC_TAKE_WORLD = ::WID_SC_TAKE_WORLD, ///< Button for taking a screenshot of the whole world + WID_SC_TAKE_HEIGHTMAP = ::WID_SC_TAKE_HEIGHTMAP, ///< Button for taking a heightmap "screenshot" + }; + /* automatically generated from ../../widgets/settings_widget.h */ /** Widgets of the #GameOptionsWindow class. */ enum GameOptionsWidgets { diff --git a/src/script/api/template/template_window.hpp.sq b/src/script/api/template/template_window.hpp.sq index 016726db2f..723c98a91b 100644 --- a/src/script/api/template/template_window.hpp.sq +++ b/src/script/api/template/template_window.hpp.sq @@ -193,6 +193,8 @@ namespace SQConvert { template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildRoadDepotWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } template <> inline ScriptWindow::BuildRoadStationWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::BuildRoadStationWidgets)tmp; } template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::BuildRoadStationWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } + template <> inline ScriptWindow::ScreenshotWindowWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::ScreenshotWindowWidgets)tmp; } + template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::ScreenshotWindowWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } template <> inline ScriptWindow::GameOptionsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GameOptionsWidgets)tmp; } template <> inline int Return(HSQUIRRELVM vm, ScriptWindow::GameOptionsWidgets res) { sq_pushinteger(vm, (int32)res); return 1; } template <> inline ScriptWindow::GameSettingsWidgets GetParam(ForceType, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptWindow::GameSettingsWidgets)tmp; } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 748a1e3dde..d2fe466911 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -48,6 +48,7 @@ #include "toolbar_gui.h" #include "framerate_type.h" #include "guitimer_func.h" +#include "screenshot_gui.h" #include "widgets/toolbar_widget.h" @@ -1066,15 +1067,10 @@ static CallBackFunction PlaceLandBlockInfo() static CallBackFunction ToolbarHelpClick(Window *w) { - PopupMainToolbMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_HELP : (int)WID_TN_HELP, STR_ABOUT_MENU_LAND_BLOCK_INFO, _settings_client.gui.newgrf_developer_tools ? 13 : 10); + PopupMainToolbMenu(w, _game_mode == GM_EDITOR ? (int)WID_TE_HELP : (int)WID_TN_HELP, STR_ABOUT_MENU_LAND_BLOCK_INFO, _settings_client.gui.newgrf_developer_tools ? 10 : 7); return CBF_NONE; } -static void MenuClickSmallScreenshot() -{ - MakeScreenshot(SC_VIEWPORT, nullptr); -} - /** * Callback on the confirmation window for huge screenshots. * @param w Window with viewport @@ -1090,7 +1086,7 @@ static void ScreenshotConfirmCallback(Window *w, bool confirmed) * Ask for confirmation if the screenshot will be huge. * @param t Screenshot type: World or viewport screenshot */ -static void MenuClickLargeWorldScreenshot(ScreenshotType t) +static void MenuClickScreenshot(ScreenshotType t) { ViewPort vp; SetupScreenshotViewport(t, &vp); @@ -1164,15 +1160,12 @@ static CallBackFunction MenuClickHelp(int index) case 0: return PlaceLandBlockInfo(); case 2: IConsoleSwitch(); break; case 3: ShowAIDebugWindow(); break; - case 4: MenuClickSmallScreenshot(); break; - case 5: MenuClickLargeWorldScreenshot(SC_ZOOMEDIN); break; - case 6: MenuClickLargeWorldScreenshot(SC_DEFAULTZOOM); break; - case 7: MenuClickLargeWorldScreenshot(SC_WORLD); break; - case 8: ShowFramerateWindow(); break; - case 9: ShowAboutWindow(); break; - case 10: ShowSpriteAlignerWindow(); break; - case 11: ToggleBoundingBoxes(); break; - case 12: ToggleDirtyBlocks(); break; + case 4: ShowScreenshotWindow(); break; + case 5: ShowFramerateWindow(); break; + case 6: ShowAboutWindow(); break; + case 7: ShowSpriteAlignerWindow(); break; + case 8: ToggleBoundingBoxes(); break; + case 9: ToggleDirtyBlocks(); break; } return CBF_NONE; } @@ -2124,10 +2117,10 @@ struct MainToolbarWindow : Window { case MTHK_BUILD_TREES: ShowBuildTreesToolbar(); break; case MTHK_MUSIC: ShowMusicWindow(); break; case MTHK_AI_DEBUG: ShowAIDebugWindow(); break; - case MTHK_SMALL_SCREENSHOT: MenuClickSmallScreenshot(); break; - case MTHK_ZOOMEDIN_SCREENSHOT: MenuClickLargeWorldScreenshot(SC_ZOOMEDIN); break; - case MTHK_DEFAULTZOOM_SCREENSHOT: MenuClickLargeWorldScreenshot(SC_DEFAULTZOOM); break; - case MTHK_GIANT_SCREENSHOT: MenuClickLargeWorldScreenshot(SC_WORLD); break; + case MTHK_SMALL_SCREENSHOT: MenuClickScreenshot(SC_VIEWPORT); break; + case MTHK_ZOOMEDIN_SCREENSHOT: MenuClickScreenshot(SC_ZOOMEDIN); break; + case MTHK_DEFAULTZOOM_SCREENSHOT: MenuClickScreenshot(SC_DEFAULTZOOM); break; + case MTHK_GIANT_SCREENSHOT: MenuClickScreenshot(SC_WORLD); break; case MTHK_CHEATS: if (!_networking) ShowCheatWindow(); break; case MTHK_TERRAFORM: ShowTerraformToolbar(); break; case MTHK_EXTRA_VIEWPORT: ShowExtraViewPortWindowForTileUnderCursor(); break; @@ -2496,10 +2489,10 @@ struct ScenarioEditorToolbarWindow : Window { case MTEHK_SIGN: cbf = ToolbarScenPlaceSign(this); break; case MTEHK_MUSIC: ShowMusicWindow(); break; case MTEHK_LANDINFO: cbf = PlaceLandBlockInfo(); break; - case MTEHK_SMALL_SCREENSHOT: MenuClickSmallScreenshot(); break; - case MTEHK_ZOOMEDIN_SCREENSHOT: MenuClickLargeWorldScreenshot(SC_ZOOMEDIN); break; - case MTEHK_DEFAULTZOOM_SCREENSHOT: MenuClickLargeWorldScreenshot(SC_DEFAULTZOOM); break; - case MTEHK_GIANT_SCREENSHOT: MenuClickLargeWorldScreenshot(SC_WORLD); break; + case MTEHK_SMALL_SCREENSHOT: MenuClickScreenshot(SC_VIEWPORT); break; + case MTEHK_ZOOMEDIN_SCREENSHOT: MenuClickScreenshot(SC_ZOOMEDIN); break; + case MTEHK_DEFAULTZOOM_SCREENSHOT: MenuClickScreenshot(SC_DEFAULTZOOM); break; + case MTEHK_GIANT_SCREENSHOT: MenuClickScreenshot(SC_WORLD); break; case MTEHK_ZOOM_IN: ToolbarZoomInClick(this); break; case MTEHK_ZOOM_OUT: ToolbarZoomOutClick(this); break; case MTEHK_TERRAFORM: ShowEditorTerraformToolbar(); break; diff --git a/src/widgets/screenshot_widget.h b/src/widgets/screenshot_widget.h new file mode 100644 index 0000000000..40a0da246c --- /dev/null +++ b/src/widgets/screenshot_widget.h @@ -0,0 +1,25 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file screenshot_widget.h Types related to the screenshot widgets. */ + +#ifndef WIDGETS_SCREENSHOT_WIDGET_H +#define WIDGETS_SCREENSHOT_WIDGET_H + +/** Widgets of the #ScreenshotWindow class. */ + +enum ScreenshotWindowWidgets { + WID_SC_TAKE, ///< Button for taking a normal screenshot + WID_SC_TAKE_ZOOMIN, ///< Button for taking a zoomed in screenshot + WID_SC_TAKE_DEFAULTZOOM, ///< Button for taking a screenshot at normal zoom + WID_SC_TAKE_WORLD, ///< Button for taking a screenshot of the whole world + WID_SC_TAKE_HEIGHTMAP, ///< Button for taking a heightmap "screenshot" +}; + + +#endif /* WIDGETS_SCREENSHOT_WIDGET_H */ + diff --git a/src/window_type.h b/src/window_type.h index 15b022b562..f99b5cb6d7 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -691,6 +691,12 @@ enum WindowClass { */ WC_FRAMETIME_GRAPH, + /** + * Screenshot window; %Window numbers: + * - 0 = #ScreenshotWidgets + */ + WC_SCREENSHOT, + WC_INVALID = 0xFFFF, ///< Invalid window. }; From 3a557b03362828b9dad1c3aff6754bd25d279e63 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 1 Jan 2020 19:45:41 +0100 Subject: [PATCH 65/84] Update: Translations from eints finnish: 11 changes by hpiirai korean: 6 changes by telk5093 --- src/lang/afrikaans.txt | 1 + src/lang/arabic_egypt.txt | 1 + src/lang/basque.txt | 1 + src/lang/belarusian.txt | 1 + src/lang/brazilian_portuguese.txt | 1 + src/lang/bulgarian.txt | 1 + src/lang/catalan.txt | 1 + src/lang/croatian.txt | 1 + src/lang/czech.txt | 1 + src/lang/danish.txt | 1 + src/lang/dutch.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/english_US.txt | 1 + src/lang/esperanto.txt | 1 + src/lang/estonian.txt | 1 + src/lang/faroese.txt | 1 + src/lang/finnish.txt | 12 ++++++++++++ src/lang/french.txt | 1 + src/lang/gaelic.txt | 1 + src/lang/galician.txt | 1 + src/lang/german.txt | 1 + src/lang/greek.txt | 1 + src/lang/hebrew.txt | 1 + src/lang/hungarian.txt | 1 + src/lang/icelandic.txt | 1 + src/lang/indonesian.txt | 1 + src/lang/irish.txt | 1 + src/lang/italian.txt | 1 + src/lang/japanese.txt | 1 + src/lang/korean.txt | 7 +++++++ src/lang/latin.txt | 1 + src/lang/latvian.txt | 1 + src/lang/lithuanian.txt | 1 + src/lang/luxembourgish.txt | 1 + src/lang/malay.txt | 1 + src/lang/norwegian_bokmal.txt | 1 + src/lang/norwegian_nynorsk.txt | 1 + src/lang/polish.txt | 1 + src/lang/portuguese.txt | 1 + src/lang/romanian.txt | 1 + src/lang/russian.txt | 1 + src/lang/serbian.txt | 1 + src/lang/simplified_chinese.txt | 1 + src/lang/slovak.txt | 1 + src/lang/slovenian.txt | 1 + src/lang/spanish.txt | 1 + src/lang/spanish_MX.txt | 1 + src/lang/swedish.txt | 1 + src/lang/tamil.txt | 1 + src/lang/thai.txt | 1 + src/lang/traditional_chinese.txt | 1 + src/lang/turkish.txt | 1 + src/lang/ukrainian.txt | 1 + src/lang/unfinished/chuvash.txt | 1 + src/lang/unfinished/frisian.txt | 1 + src/lang/unfinished/ido.txt | 1 + src/lang/unfinished/macedonian.txt | 1 + src/lang/unfinished/maltese.txt | 1 + src/lang/unfinished/marathi.txt | 1 + src/lang/unfinished/persian.txt | 1 + src/lang/unfinished/urdu.txt | 1 + src/lang/vietnamese.txt | 1 + src/lang/welsh.txt | 1 + 63 files changed, 80 insertions(+) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 4e50215d81..e4ff59124d 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3998,6 +3998,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Kies bel STR_AI_LIST_CANCEL :{BLACK}Kanseleer STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Moenie skrif verander nie + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 2c833b8fd7..5b3b0b3405 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -3484,6 +3484,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} اخت STR_AI_LIST_CANCEL :{BLACK} الغاء STR_AI_LIST_CANCEL_TOOLTIP :{BLACK} لا تغير الذكاء الصناعي + # AI Parameters STR_AI_SETTINGS_CLOSE :{BLACK} اغلاق STR_AI_SETTINGS_RESET :{BLACK} اعادة ضبط diff --git a/src/lang/basque.txt b/src/lang/basque.txt index 9f8ba074a0..e10c258f3f 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -3873,6 +3873,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Piztutak STR_AI_LIST_CANCEL :{BLACK}Ezeztatu STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ez aldatu script-a + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametroak STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index b645648610..9b3ee3b45e 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -4382,6 +4382,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Выбр STR_AI_LIST_CANCEL :{BLACK}Скасаваць STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не змяняць скрыпт + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Параметры {STRING} STR_AI_SETTINGS_CAPTION_AI :ШI diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 42ececa0e9..b1a191b9d8 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -4072,6 +4072,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selecion STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros STR_AI_SETTINGS_CAPTION_AI :{G=f}IA diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index bc882bb523..7a22b1d1d5 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3975,6 +3975,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Избе STR_AI_LIST_CANCEL :{BLACK}Отмени STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не променяй AI + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 65b3308f67..353a0d018b 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -4117,6 +4117,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio STR_AI_LIST_CANCEL :{BLACK}Cancel·la STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No canviïs l'script. + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Paràmetres {STRING} STR_AI_SETTINGS_CAPTION_AI :de la IA diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index a23f3b9856..8bd85872f5 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -4267,6 +4267,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Odaberi STR_AI_LIST_CANCEL :{BLACK}Odustani STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemoj mijenjati skriptu + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri STR_AI_SETTINGS_CAPTION_AI :UI diff --git a/src/lang/czech.txt b/src/lang/czech.txt index ef10311dc7..4f82a48972 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -4260,6 +4260,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vybrat o STR_AI_LIST_CANCEL :{BLACK}Zrušit STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Neměňte skript + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 1a018f7b0c..9ae5ea9c47 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -4121,6 +4121,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vælg ma STR_AI_LIST_CANCEL :{BLACK}Afbryd STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skift ikke script'et + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 8cb39feabb..9ec883fc90 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -4172,6 +4172,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Gemarkee STR_AI_LIST_CANCEL :{BLACK}Annuleren STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script niet wijzigen + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index c738158e7c..807a266b8c 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3948,6 +3948,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Select h STR_AI_LIST_CANCEL :{BLACK}Cancel STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 57622f08c9..70435b34da 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -4162,6 +4162,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Select h STR_AI_LIST_CANCEL :{BLACK}Cancel STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Don't change the script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/esperanto.txt b/src/lang/esperanto.txt index f54548455e..43d426dc54 100644 --- a/src/lang/esperanto.txt +++ b/src/lang/esperanto.txt @@ -3384,6 +3384,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Elekti e STR_AI_LIST_CANCEL :{BLACK}Nuligi STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne ŝanĝu AI-on + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametroj STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index d562ea85bd..2ba6cef796 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -4090,6 +4090,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vali esi STR_AI_LIST_CANCEL :{BLACK}Loobu STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ära skripti muuda + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameetrid STR_AI_SETTINGS_CAPTION_AI :Tehismõistus diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index 296a2824a2..e2958308ca 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -3524,6 +3524,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vel undi STR_AI_LIST_CANCEL :{BLACK}Angra STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikki broyta scripti + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametur STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index df71075efd..1f2eabe0a8 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -867,6 +867,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Uusi {STRING} on nyt saatavilla! – {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Avaa ryhmäikkuna kulkuneuvon ryhmään kohdistettuna STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING}. STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} ei ota enää vastaan {STRING} tai {STRING}. @@ -1548,6 +1549,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Täysi STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Värilliset uutiset ilmestyvät: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Vuosi, jonka jälkeen sanomalehdet ovat värillisiä. Ennen tätä vuotta sanomalehdet käyttävät mustavalkoisia kuvia STR_CONFIG_SETTING_STARTING_YEAR :Aloitusvuosi: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Pistelaskun päättymisvuosi: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Pelin päättymisvuosi pisteiden laskemista varten. Tämän vuoden lopussa talletetaan yhtiön pistemäärä ja näytetään ennätysluettelo; pelaajat voivat jatkaa pelaamista tämän jälkeenkin.{}Jos päättymisvuosi on ennen alkamisvuotta, ennätyksiä ei näytetä koskaan. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Ei koskaan STR_CONFIG_SETTING_SMOOTH_ECONOMY :Tasainen talous (enemmän pieniä muutoksia): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Mikäli käytössä, teollisuuden tuotanto muuttuu useammin ja vähemmän kerrallaan. Tällä asetuksella ei ole yleensä vaikutusta mikäli teollisuustyypit ovat NewGRF:n tarjoamia STR_CONFIG_SETTING_ALLOW_SHARES :Salli toisten yhtiöiden osakkeiden ostaminen: {STRING} @@ -4171,6 +4176,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Valitse STR_AI_LIST_CANCEL :{BLACK}Peruuta STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Älä vaihda skriptiä +STR_SCREENSHOT_CAPTION :{WHITE}Ota kuvakaappaus +STR_SCREENSHOT_SCREENSHOT :{BLACK}Tavallinen kuvakaappaus +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Täysin lähennetty kuvakaappaus +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Kuvakaappaus oletuslähennyksellä +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Koko kartan kuvakaappaus +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeuskartan kuvakaappaus + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrit STR_AI_SETTINGS_CAPTION_AI :Tekoäly diff --git a/src/lang/french.txt b/src/lang/french.txt index bf4f6bfd83..1b2b1bc38e 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4177,6 +4177,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Sélecti STR_AI_LIST_CANCEL :{BLACK}Annuler STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne pas modifier le script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paramètres STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 16568a5497..b86858feb4 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -4292,6 +4292,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Cleachd STR_AI_LIST_CANCEL :{BLACK}Sguir dheth STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Na atharraich an sgriobt + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Paramadairean aig {STRING} STR_AI_SETTINGS_CAPTION_AI :IF diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 9591d91bcb..d288de674f 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -4172,6 +4172,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non cambia-lo script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parámetros STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/german.txt b/src/lang/german.txt index 769d393ceb..0e4d4a8b49 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -4117,6 +4117,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Ausgewä STR_AI_LIST_CANCEL :{BLACK}Abbrechen STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript nicht wechseln + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter STR_AI_SETTINGS_CAPTION_AI :KI diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 884c1c843d..8d7cf78ed3 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -4243,6 +4243,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Αποδ STR_AI_LIST_CANCEL :{BLACK}Άκυρωση STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Να μην γίνει αλλαγή δέσμης ενεργειών + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Παράμετροι STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index 9877e16679..ec5f5fdbb5 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -4071,6 +4071,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK} בחר STR_AI_LIST_CANCEL :{BLACK}בטל STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}אל תשנה את התסריט + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} פרמטרים STR_AI_SETTINGS_CAPTION_AI :שחקן מחשב diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index ab3c032931..2f5bc022fb 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -4229,6 +4229,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}A kijel STR_AI_LIST_CANCEL :{BLACK}Mégsem STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne változtassa a szkriptet + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paraméterek STR_AI_SETTINGS_CAPTION_AI :MI diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index 34693b804e..e18ef00614 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -3765,6 +3765,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Velja me STR_AI_LIST_CANCEL :{BLACK}Hætta við STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Hætta við breytingar forskriftar + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} breytur STR_AI_SETTINGS_CAPTION_AI :Gervigreindar diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index 4889dcb18e..55371a4217 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -4064,6 +4064,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pilih sk STR_AI_LIST_CANCEL :{BLACK}Batal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Jangan mengubah skrip AI + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 1e0cb7b6cc..96d67a2ee1 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3997,6 +3997,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Roghnaig STR_AI_LIST_CANCEL :{BLACK}Cuir ar ceal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ná hathraigh an AI + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Paraiméadair {STRING} STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 4ea278a830..e8585ede75 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -4194,6 +4194,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Sceglie STR_AI_LIST_CANCEL :{BLACK}Annulla STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non modifica lo script utilizzato + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Parametri {STRING} STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 64d6ee52db..f619b00355 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -4000,6 +4000,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}選択 STR_AI_LIST_CANCEL :{BLACK}キャンセル STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}スクリプトを変更しません + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} パラメータ STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 6166ac2a1e..72bb66d9bd 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4177,6 +4177,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}선택 STR_AI_LIST_CANCEL :{BLACK}취소 STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}인공지능 스크립트를 바꾸지 않습니다 +STR_SCREENSHOT_CAPTION :{WHITE}스크린 샷 찍기 +STR_SCREENSHOT_SCREENSHOT :{BLACK}일반 스크린 샷 +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}최대 확대 스크린 샷 +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}기본 크기 스크린 샷 +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}지도 전체 스크린 샷 +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}높이맵 스크린 샷 + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 매개 변수 STR_AI_SETTINGS_CAPTION_AI :인공지능 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 665320dce3..de80573f27 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -4292,6 +4292,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Eligere STR_AI_LIST_CANCEL :{BLACK}Cancellare STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Non scriptum mutare + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametra STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 31e111cb15..92b30d3b53 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3934,6 +3934,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Izvēlē STR_AI_LIST_CANCEL :{BLACK}Atcelt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemainīt skriptu + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametri STR_AI_SETTINGS_CAPTION_AI :MI diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 07e589c50b..0a6415d39f 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -4272,6 +4272,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pasirink STR_AI_LIST_CANCEL :{BLACK}Atšaukti STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nekeisti skripto + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrai STR_AI_SETTINGS_CAPTION_AI :DI diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 4e5ae1d5cf..24defd5f47 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -4106,6 +4106,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Wiel de STR_AI_LIST_CANCEL :{BLACK}Ofbriechen STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script net änneren + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter STR_AI_SETTINGS_CAPTION_AI :KI diff --git a/src/lang/malay.txt b/src/lang/malay.txt index f501163ded..0858b6edfc 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -3682,6 +3682,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Pilih sk STR_AI_LIST_CANCEL :{BLACK}Batal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Jangan ubah skrip + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 78cf30ab20..3ae59635c7 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -4167,6 +4167,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Velg det STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikke endre skriptet + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index 6771d47bcd..52e79466f7 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -3913,6 +3913,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Merk uth STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ikkje endre AI + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/polish.txt b/src/lang/polish.txt index f96658d64f..51faa8169a 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -4557,6 +4557,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Wybierz STR_AI_LIST_CANCEL :{BLACK}Anuluj STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nie zmieniaj skryptu + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametry STR_AI_SETTINGS_CAPTION_AI :SI diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 9d1df78efb..24147384ee 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -4157,6 +4157,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Não mudar o script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parâmetros STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index ce2f35c0c6..52f76bcebc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3983,6 +3983,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Alege sc STR_AI_LIST_CANCEL :{BLACK}Anulează STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nu schimba scriptul + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrii STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 3699f620ac..cdd046a18a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4368,6 +4368,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Выбр STR_AI_LIST_CANCEL :{BLACK}Отмена STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не менять скрипт + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Параметры {STRING} STR_AI_SETTINGS_CAPTION_AI :ИИ diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 2b19ec5d04..84d5fac524 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -4239,6 +4239,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Izabira STR_AI_LIST_CANCEL :{BLACK}Otkaži STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne menja skriptu + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri STR_AI_SETTINGS_CAPTION_AI :VI diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 727ecd038e..afc0a1c210 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -4112,6 +4112,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}选择 STR_AI_LIST_CANCEL :{BLACK}取消 STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}不修改本 AI + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 参数 STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 893ef55688..12076ab415 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -4065,6 +4065,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vybrať STR_AI_LIST_CANCEL :{BLACK}Zrušiť STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Nemeniť skript + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametre STR_AI_SETTINGS_CAPTION_AI :Imelá inteligencia diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 6f2fa64d91..62ab6a146f 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -4155,6 +4155,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Izberi o STR_AI_LIST_CANCEL :{BLACK}Prekliči STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne spremeni skripte + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametri STR_AI_SETTINGS_CAPTION_AI :UI diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index bc92c15e6d..a6fc9e7572 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -4164,6 +4164,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Seleccio STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No cambiar de script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Parámetros {STRING} STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index 72047c6632..a579bec4da 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -4173,6 +4173,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Elegir e STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No cambiar de script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Parámetros {STRING} STR_AI_SETTINGS_CAPTION_AI :IA diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index e5cbf27dda..c2586338ec 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -4162,6 +4162,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Välj ma STR_AI_LIST_CANCEL :{BLACK}Avbryt STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ändra inte datorspelare + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} parametrar STR_AI_SETTINGS_CAPTION_AI :Datorspelarens diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 83decab0d7..b56b713ff4 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3627,6 +3627,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}கு STR_AI_LIST_CANCEL :{BLACK}இரத்து செய் STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}வரிவடிவத்தினை மாற்றாதே + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} குணாதிசயங்கள் STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/thai.txt b/src/lang/thai.txt index 19b68af5ce..43ef13c601 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3912,6 +3912,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}เล STR_AI_LIST_CANCEL :{BLACK}ยกเลิก STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}ไม่สามารถเปลี่ยน script + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 5db0ef4fe3..5eed6da2be 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3998,6 +3998,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}選擇 STR_AI_LIST_CANCEL :{BLACK}取消 STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}不改變腳本 + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} 參數 STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 06837b13ba..1e42d697d7 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -4106,6 +4106,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Vurgulan STR_AI_LIST_CANCEL :{BLACK}İptal STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Betiği değiştirme + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametreler STR_AI_SETTINGS_CAPTION_AI :YZ diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 52cc7ec170..c91107106d 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -4302,6 +4302,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Вибр STR_AI_LIST_CANCEL :{BLACK}Відміна STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не міняти скрипт + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри STR_AI_SETTINGS_CAPTION_AI :АІ diff --git a/src/lang/unfinished/chuvash.txt b/src/lang/unfinished/chuvash.txt index e908fde11f..c0d4640215 100644 --- a/src/lang/unfinished/chuvash.txt +++ b/src/lang/unfinished/chuvash.txt @@ -1301,6 +1301,7 @@ STR_AI_CONFIG_CHANGE_NONE : STR_AI_LIST_VERSION :{LTBLUE}Верси: {ORANGE}{NUM} + # AI Parameters STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/unfinished/frisian.txt b/src/lang/unfinished/frisian.txt index ab78237492..a5889385bd 100644 --- a/src/lang/unfinished/frisian.txt +++ b/src/lang/unfinished/frisian.txt @@ -3575,6 +3575,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Selektea STR_AI_LIST_CANCEL :{BLACK}Annulearje STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Skript net feroare + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/unfinished/ido.txt b/src/lang/unfinished/ido.txt index 90e7cc2af4..b42bb4b26b 100644 --- a/src/lang/unfinished/ido.txt +++ b/src/lang/unfinished/ido.txt @@ -1153,6 +1153,7 @@ STR_AI_CONFIG_CHANGE_NONE : + # AI Parameters STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/unfinished/macedonian.txt b/src/lang/unfinished/macedonian.txt index 6eea51de05..38de211d42 100644 --- a/src/lang/unfinished/macedonian.txt +++ b/src/lang/unfinished/macedonian.txt @@ -1675,6 +1675,7 @@ STR_AI_LIST_CAPTION_GAMESCRIPT :GameScripts + # AI Parameters STR_AI_SETTINGS_CAPTION_AI :АИ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :GameScript diff --git a/src/lang/unfinished/maltese.txt b/src/lang/unfinished/maltese.txt index 8f9079d282..f9ca9ccdd1 100644 --- a/src/lang/unfinished/maltese.txt +++ b/src/lang/unfinished/maltese.txt @@ -1022,6 +1022,7 @@ STR_AI_CONFIG_CHANGE_NONE : + # AI Parameters diff --git a/src/lang/unfinished/marathi.txt b/src/lang/unfinished/marathi.txt index fef9533eaf..76aae87bf1 100644 --- a/src/lang/unfinished/marathi.txt +++ b/src/lang/unfinished/marathi.txt @@ -1487,6 +1487,7 @@ STR_AI_CONFIG_CHANGE_NONE : + # AI Parameters STR_AI_SETTINGS_SETTING :{STRING}: {ORANGE}{STRING} diff --git a/src/lang/unfinished/persian.txt b/src/lang/unfinished/persian.txt index 320c29c6bc..0aee471d55 100644 --- a/src/lang/unfinished/persian.txt +++ b/src/lang/unfinished/persian.txt @@ -3287,6 +3287,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}انتخ STR_AI_LIST_CANCEL :{BLACK}لغو STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}کد را تغییر نده + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} پارامترها STR_AI_SETTINGS_CAPTION_AI :هوش مصنوعی(AI) diff --git a/src/lang/unfinished/urdu.txt b/src/lang/unfinished/urdu.txt index 74c3dbece5..47d1abf0c2 100644 --- a/src/lang/unfinished/urdu.txt +++ b/src/lang/unfinished/urdu.txt @@ -2543,6 +2543,7 @@ STR_AI_CONFIG_CHANGE_NONE : + # AI Parameters diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1ab2a02544..1d63b96ea7 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -4171,6 +4171,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Chấp n STR_AI_LIST_CANCEL :{BLACK}Huỷ bỏ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Không đổi tập lệnh + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Các Thông Số STR_AI_SETTINGS_CAPTION_AI :AI diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index 8fd0a33a2e..9c4cafefd4 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -4029,6 +4029,7 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Dewis y STR_AI_LIST_CANCEL :{BLACK}Canslo STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Peidio newid y sgript + # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paramedrau STR_AI_SETTINGS_CAPTION_AI :AI From 9e4533dc8f82dccc0e334fa4b100544b079b5f4f Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 2 Jan 2020 19:45:39 +0100 Subject: [PATCH 66/84] Update: Translations from eints luxembourgish: 131 changes by Phreeze french: 6 changes by arikover spanish (mexican): 20 changes by Absay --- src/lang/french.txt | 6 ++ src/lang/luxembourgish.txt | 179 +++++++++++++++++++++++++++---------- src/lang/spanish_MX.txt | 30 ++++--- 3 files changed, 157 insertions(+), 58 deletions(-) diff --git a/src/lang/french.txt b/src/lang/french.txt index 1b2b1bc38e..ed3e4551a0 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4177,6 +4177,12 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Sélecti STR_AI_LIST_CANCEL :{BLACK}Annuler STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Ne pas modifier le script +STR_SCREENSHOT_CAPTION :{WHITE}Faire une capture d'écran +STR_SCREENSHOT_SCREENSHOT :{BLACK}Capture d'écran normale +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Capture d'écran au zoom maximum +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Capture d'écran sans zoom +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Capture d'écran de toute la carte +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Capture d'écran de la carte d'altitude # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Paramètres diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 24defd5f47..c2f5ec049e 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -235,6 +235,8 @@ STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Filterkr STR_BUTTON_SORT_BY :{BLACK}Sortéier no STR_BUTTON_LOCATION :{BLACK}Plaz STR_BUTTON_RENAME :{BLACK}Ëmbenennen +STR_BUTTON_CATCHMENT :{BLACK}Reechwäit +STR_TOOLTIP_CATCHMENT :{BLACK}Reechwäit uweisen un/ausschalten STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Fënster zoumaachen STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Fënstertitel - hei zéien fir d'Fënster ze bewegen @@ -263,6 +265,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Mat dës STR_BUTTON_DEFAULT :{BLACK}Standard STR_BUTTON_CANCEL :{BLACK}Ofbriechen STR_BUTTON_OK :{BLACK}OK +STR_WARNING_PASSWORD_SECURITY :{YELLOW}Warnung: Server-Administratoren kënnen all Text aus desem Feld liesen. # On screen keyboard window STR_OSK_KEYBOARD_LAYOUT :§1234567890'^\qwertzuiopè¨asdfghjkléà yxcvbnm,.- . @@ -336,6 +339,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Vergréi STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Verklenger d'Sicht STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Schinne bauen STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Stroosse bauen +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Tramway bauen STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Schëffhafe bauen STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Fluchhafe bauen STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Landschafts-Toolbar opman fir Land ze erhéijen/senken, Beem planzen, etc. @@ -356,6 +360,7 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Landscha STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Stiederstellung STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Industrieerstellung STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Stroossebau +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Tramkonstruktioun STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Beem planzen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Schëld opstellen STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Objet plazéiren. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen @@ -787,11 +792,11 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Bierger feieren . . .{}Éischt Schëff kënnt zu {STATION} un! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Bierger feieren . . .{}Éischte Fliger kënnt zu {STATION} un! -STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Zuchakzident!{}{COMMA} Leit stiewen an der Explosioun nom Akzident -STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Stroossenakzident!{}Fuerer stierft an der Explosioun no Akzident mat Zuch -STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Stroossegefierakzident!{}{COMMA} Leit stiewen an der Explosioun no Akzident mam Zuch -STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Fligerakzident!{}{COMMA} Leit stiewen an der Explosioun bei {STATION} -STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Fligerakzident!{}Fliger hat kee Bensin méi, {COMMA} Leit stiewen an Explosioun! +STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Zuchaccident!{}{COMMA} Leit stiewen an der Explosioun nom Accident +STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Stroossenaccident!{}Fuerer stierft an der Explosioun no Accident mat Zuch +STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Stroossegefieraccident!{}{COMMA} Leit stiewen an der Explosioun no Accident mam Zuch +STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Fligeraccident!{}{COMMA} Leit stiewen an der Explosioun bei {STATION} +STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Fligeraccident!{}Fliger hat kee Bensin méi, {COMMA} Leit stiewen an Explosioun! STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Zeppelinkatastroph zu {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Stroossegefier bei 'UFO'-Zesummestouss zerstéiert! @@ -862,6 +867,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Neie/Neit {STRING} verfügbar! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Maach d'Gruppefenster op, fokusséiert op der Gefiergrupp STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO :{WHITE}{STATION} akzeptéiert {STRING} net méi STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_OR_CARGO :{WHITE}{STATION} akzeptéiert {STRING} oder {STRING} net méi @@ -882,9 +888,9 @@ STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION :{BIG_FONT}{BLAC # Extra view window STR_EXTRA_VIEW_PORT_TITLE :{WHITE}Usiicht {COMMA} -STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Kopéiert op d'Usiicht +STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN :{BLACK}Ännert d'Usiicht STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT :{BLACK}Kopéiert d'Plaz vun der globaler Usiicht op des Usiicht -STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Vun der Usiicht drasetzen +STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Haptusiicht änneren STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Setzt d'Plaz vun dëser Usiicht op déi global Usiicht # Game options window @@ -929,6 +935,9 @@ STR_GAME_OPTIONS_CURRENCY_GEL :Georgesche Lari STR_GAME_OPTIONS_CURRENCY_IRR :Iranësche Rial (IRR) STR_GAME_OPTIONS_CURRENCY_RUB :Neie Russesche Rubel (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Mexikanesche Peso (MXN) +STR_GAME_OPTIONS_CURRENCY_NTD :New Taiwan Dollar (NTD) +STR_GAME_OPTIONS_CURRENCY_CNY :Chinesesch Renminbi (CNY) +STR_GAME_OPTIONS_CURRENCY_HKD :Hong Kong Dollar (HKD) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Stroossegefierer @@ -1175,12 +1184,13 @@ STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Wielt aus, wéi STR_CONFIG_SETTING_MAX_HEIGHTLEVEL :Maximal Kaartenhéicht: {STRING} STR_CONFIG_SETTING_MAX_HEIGHTLEVEL_HELPTEXT :Setzt déi maximal erlabten Héicht fir Bierger op dëser Kaart -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kanns d'maximal Kaartenhéischt net op dësen Wäert setzen. Op manst ee Bierg op der Kaart ass méi héich +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Du kanns d'maximal Kaartenhéicht net op dëse Wäert setzen. Op manst ee Bierg op der Kaart ass méi héich STR_CONFIG_SETTING_AUTOSLOPE :Erlaabt Landformung ënnert Gebaier, Stroossen, etc.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Erlaabt Terraintransformatioun ënnert Gebaier an Schinnen ouni dës ewechzehuelen STR_CONFIG_SETTING_CATCHMENT :Erlaabt méi realistësch Einzugsberäicher: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Statiounen a Fluchhäfen hunn verschidde grouss Einzugsberäicher STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Gare vun der Firma kënnen Industrie beliwwere mat neutrale Statiounen: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Wann ugeschalt dierefen Industrien mat agebaute Statiounen (z.b Buerinselen) och vu Firmestatiounen déi an der Géigend gebaut goufen beliwwert ginn. Wann ausgeschalt, dierfen se just vun den agebaute Statioune benotzt ginn. An der Géigend gebaute Firmestatiounen wärten se net benotzen an déi agebaute Statiounen beliwweren och keen ausser d'Industrie selwer. STR_CONFIG_SETTING_EXTRADYNAMITE :Erlaabt d'Ewechhuelen vu méi Stroossen, Brécken, etc. vun der Stad: {STRING} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :Mach et méi einfach fir Infrastruktur oder Gebaier ewechzehuelen déi enger Stad gehéiren STR_CONFIG_SETTING_TRAIN_LENGTH :Maximal Längt vun Zich: {STRING} @@ -1197,8 +1207,8 @@ STR_CONFIG_SETTING_TRAIN_SLOPE_STEEPNESS_HELPTEXT :Steigung vun en STR_CONFIG_SETTING_PERCENTAGE :{COMMA}% STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Hangsteigung fir Stroossegefierer: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Steigung vun engem Hang fir Stroossegefierer. Méi grouss Wäerter mécht et méi schwéier den Hang ropzefueren -STR_CONFIG_SETTING_FORBID_90_DEG :Verbidd Zich an Schëffer fir 90°-Kéieren ze maachen: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90°-Kéieren entsti wann eng horizontal Spur direkt op eng vertikal trëfft, sou dass den Zuch misst ëm 90 Grad dréinen fir op dat nächst Stéck ze kommen, amplaz vun den üblechen 45 Grad. Dëst zielt och fir d'Weeër vu Schëffer +STR_CONFIG_SETTING_FORBID_90_DEG :Verbidd Zich fir 90°-Kéieren ze maachen: {STRING} +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90°-Kéieren entsti wann eng horizontal Spur direkt op eng vertikal trëfft, sou dass den Zuch misst ëm 90 Grad dréinen fir op dat nächst Stéck ze kommen, amplaz vun den üblechen 45 Grad. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Erlaabt Statiounen zesummen ze setzen och wann se net direkt uneneen leien: {STRING} STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Erlaabt Statiounsdeeler un eng Statioun unzehenken ouni déi existéiernd Statioun ze beréiren. Ctr+Klick fir déi nei Deeler unzehenken STR_CONFIG_SETTING_INFLATION :Inflatioun: {STRING} @@ -1253,9 +1263,9 @@ STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Leet den Impakt STR_CONFIG_SETTING_PLANE_SPEED :Fligergeschwindegkeetsfaktor: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Leet d'relativ Geschwindegkeet vu Fligeren am Verglach mat anere Gefierer fest, fir d'Akomme vum Transport vu Fligeren ze reduzéiren STR_CONFIG_SETTING_PLANE_SPEED_VALUE :1 / {COMMA} -STR_CONFIG_SETTING_PLANE_CRASHES :Unzuel Fligerakzidenter: {STRING} -STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Leet d'Chance fir en Fligerakzident fest -STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Keng +STR_CONFIG_SETTING_PLANE_CRASHES :Unzuel Fligeraccidenter: {STRING} +STR_CONFIG_SETTING_PLANE_CRASHES_HELPTEXT :Leet d'Chance fir enzoufällegen Fligeraccident fest.{}* Grouss Fligeren hunn emmer en Accidents-Risiko wann se op engem klenge Fluchhafen landen +STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Keng* STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Reduzéiert STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Normal STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Erlaabt d'Iwwerfueren vu Stopschëlder op Stroossen vun der Stad: {STRING} @@ -1267,6 +1277,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastrukturë STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Wann ugeschalt, kaschten Infrastrukturen Ennerhaltskäschten. D'Käschten wuessen iwwerproportional zu der Netzwierkgréisst, an treffen sou grouss Firmen méi wéi klenger STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Firmefaarw um Start: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Wiel d'Startfaarw vun der Firma STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Fluchhäfen lafen nie of: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Wann ugeschalt, bleift all Fluchhafentyp säit senger Aféierung bestoen @@ -1312,8 +1323,8 @@ STR_CONFIG_SETTING_TERRAIN_TYPE :Terraintyp: {ST STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(Nëmmen TerraGenesis) Hiwwelegkeet vun der Landschaft STR_CONFIG_SETTING_INDUSTRY_DENSITY :Industriedicht: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Definéiert wéivill Industrien generéiert sollen ginn an wéivill der während dem Spill sollen behalen ginn. -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximal Distanz vum Kaartenenn bis zu enger Uelegraffinerie: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Uelëgraffinerien ginn nëmmen um Rand gebaut, dat ass un der Küst fir Inselkaarten +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Maximal Distanz vum Kaarterand bis zu enger Uelegindustrie: {STRING} +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Limitéiert wéi wäit vum Bord Uelegraffinerien an Buerinsele dierfe gebaut ginn. Op Inselkaarten garantéiert dest dass se um Rand gebaut ginn. Op Kaarten mat méi wéi 256 Felder, gett dese Wert skaléiert STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Schnéigrenz Héicht: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrolléiert ab welcher Héicht de Schnéi ufenkt an der subarktëscher Landschaft. Schnéi affektéiert och Industriegeneratioun an de Wuesstum vu Stied. STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Knubbelegkeet vum Terrain (nëmmen TerraGenesis) : {STRING} @@ -1354,6 +1365,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Mof STR_CONFIG_SETTING_SCROLLMODE :Usiicht-Scrollverhalen: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Verhalen beim Scrolle vun der Kaart STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :D'Usiicht mat der rietser Maustast bewegen, Maus-Positioun gespaart +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Beweg d'Kaart mat der rietser Maustast, Maus-Positioun gespaart STR_CONFIG_SETTING_SCROLLMODE_RMB :D'Kaart mat der rietser Maustast bewegen STR_CONFIG_SETTING_SCROLLMODE_LMB :Kaart mat der lénker Maustast bewegen STR_CONFIG_SETTING_SMOOTH_SCROLLING :Feine Scrolling: {STRING} @@ -1439,8 +1451,8 @@ STR_CONFIG_SETTING_SOUND_CONFIRM :Konstruktioun: STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Spill Soundeffekter of wa Konstruktiounen an aner Aktiounen ausgefouert goufen STR_CONFIG_SETTING_SOUND_CLICK :Kneppercherklicks: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Beep beim Klicken vu Kneppercher -STR_CONFIG_SETTING_SOUND_DISASTER :Katastrophen/Akzidenter: {STRING} -STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Spill Soundeffekter vun Akzidenter a Katastrophen of +STR_CONFIG_SETTING_SOUND_DISASTER :Katastrophen/Accidenter: {STRING} +STR_CONFIG_SETTING_SOUND_DISASTER_HELPTEXT :Spill Soundeffekter vun Accidenter a Katastrophen of STR_CONFIG_SETTING_SOUND_VEHICLE :Gefierer: {STRING} STR_CONFIG_SETTING_SOUND_VEHICLE_HELPTEXT :Spill Soundeffekter vu Gefierer of STR_CONFIG_SETTING_SOUND_AMBIENT :Ambiance: {STRING} @@ -1476,6 +1488,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Erlaabt KI am M STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Erlaabt Computergéigner a Multiplayer Spiller matzeman STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes befier de Script suspendéiert gëtt: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximal Unzuel u Rechenschrëtt déi e Script kann an engem Tuer man +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Max Späicherverbrauch pro Script: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Wéivill Späicher en eenzelne Script dierf benotzen befier en gezwongenerweis gestopt gëtt. Dese Wert muss eventuell erhéigt ginn fir grouss Kaarten. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Revisiounsintervallen a Prozenter: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Wiel op eng Revisioun ausgeléist gëtt durch Zäit déi säit der leschter Revisioun vergangen ass oder well Zouverlessëgkeet en gewëssen Prozentsaz vun der maximaler Zouverlässëgkeet erofgaang ass @@ -1500,8 +1515,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Ukonft vum éis STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Weis d'Zeitung wann dat éischt Gefier op enger eegener Statioun ukënnt STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Ukonft vum éischten Gefier op enger Géigenspillerstatioun: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Weis d'Zeitung wann dat éischt Gefier op enger géignerescher Statioun ukënnt -STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Akzidenter / Katastrophen: {STRING} -STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Weis d'Zeitung wann Akzidenter oder Katastrophen passéiren +STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Accidenter / Katastrophen: {STRING} +STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Weis d'Zeitung wann Accidenter oder Katastrophe geschéien STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Firmeninformatiounen: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Weis d'Zeitung wann eng nei Firma opgeet, oder wann ee riskéiert Bankrott ze goen STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Grënnung vun enger Industrie: {STRING} @@ -1534,10 +1549,16 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Ganz STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Faarweg News ab: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Joer vun dem uns d'Zeitung farweg erauskënnt. Firun dësem Joer ass se schwarz/wäiss STR_CONFIG_SETTING_STARTING_YEAR :Startjoer: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :End-Joer vum Scoring: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Joer wou d'Spill opgrond vum Scoring ophält. Um Enn vun desem Joer gëtt der Firma hiere Score gespäichert an an der Highscore-Lëscht ugewisen, mee de Spiller kann dono weider spillen.{}Wann dese Wert virum Startjoer ass, gëtt d'Highscorelëscht nie ugewisen. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nie STR_CONFIG_SETTING_SMOOTH_ECONOMY :Gläichméisseg Wiertschaft aschalten (méi oft an kleng Wiessel): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Wann ugeschalt, ännert d'Industrieproduktioun méi oft, an méi kléngen Schrëtter. Dës Astellung huet keng Auswierkung op NewGRF-Industrien STR_CONFIG_SETTING_ALLOW_SHARES :Undeeler vun aaneren Firmen kafen: {STRING} STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Wann ugeschalt, dierfen Aktien vu Firmen kaf an verkaf ginn. Aktien si just fir Firme verfügbar, déi en gewëssen Alter erreecht hunn +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. 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 STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Wa gezunn gëtt, setz en Signal all: {STRING} @@ -1569,7 +1590,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3x3 Gitter STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Zoufälleg STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Stied däerfen Stroossen bauen: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Erlaabt Stied Stroossen ze bauen fir ze wuessen. Ausschalten fir d'Stiedréid dorun ze hënneren fir Stroossen selwer ze bauen -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Stied dierfen Barrièren bauen: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :Stied dierfe Barrière bauen: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Wann dës Astellung ugeschalt ass, kënnen Stied Stroossen iwwert Schinne bauen STR_CONFIG_SETTING_NOISE_LEVEL :Erlab e stadkontrolléierte Kaméidisniveau fir Fluchhäfen: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Wann dës Astellung ausgeschalt ass, kënnen zwee Fluchhäfen an all Stad gebaut ginn. Wann dës Astellung ugeschalt ass, henkt et vun der Fluchhafengréisst, Distanz, Kaméidisniveau of wéivill Fluchhäfen kënne gebaut ginn @@ -1580,6 +1601,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :Erlaabt STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :Erlaabt, custom Stad-Layout STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Duerfwuerengeneratioun: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Wéivill Wuere produzéiert ginn, relativ zur Bevölkerung vum Duerf.{}Quadratesche Wuesstum: En duebel sou grousst Duerf, generéiert véier mol souvill Passagéier.{}Lineare Wuesstum: En duebel sou grousst Duerf, generéiert duebel souvill Passagéier. +STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Quadratesch (original) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Linear STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Bamplazéirung: {STRING} @@ -1698,7 +1720,7 @@ STR_CONFIG_SETTING_VEHICLES :{ORANGE}Gefiere STR_CONFIG_SETTING_VEHICLES_PHYSICS :{ORANGE}Physik STR_CONFIG_SETTING_VEHICLES_ROUTING :{ORANGE}Routeplangung STR_CONFIG_SETTING_LIMITATIONS :{ORANGE}Limitatiounen -STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Katastrophen / Akzidenter +STR_CONFIG_SETTING_ACCIDENTS :{ORANGE}Katastrophen / Accidenter STR_CONFIG_SETTING_GENWORLD :{ORANGE}Welt Generatioun STR_CONFIG_SETTING_ENVIRONMENT :{ORANGE}Emwelt STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :{ORANGE}Autoritéiten @@ -1739,7 +1761,7 @@ STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... Spil STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... ignoréiren Basis Grafik Set '{STRING}': net fonnt STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... ignoréiren Basis Sound Set '{STRING}': net fonnt STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... ignoréiren Basis Musik Set '{STRING}': net fonnt -STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Net genuch Mémoire +STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Net genuch Späicher STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Reservéirung vun {BYTES} Spritecache versot. De Spritecache gouf reduzéiert op {BYTES}. Dëst reduzéiert d'Performance vun OpenTTD. Fir Späicher ze spueren kann een probéiren 32bpp Grafiken auszeschalten an/oder Zoom-Eran Stufen # Intro window @@ -1799,7 +1821,7 @@ STR_OSNAME_SUNOS :SunOS # Abandon game STR_ABANDON_GAME_CAPTION :{WHITE}Spill ofbriechen -STR_ABANDON_GAME_QUERY :{YELLOW}Bass du sécher dass du des Partie ofbrieche wëlls? +STR_ABANDON_GAME_QUERY :{YELLOW}Bass du sécher, dass du des Partie ofbrieche wëlls? STR_ABANDON_SCENARIO_QUERY :{YELLOW}Sécher dass du aus dësem Szenario eraus wëlls ? # Cheat window @@ -1810,7 +1832,7 @@ STR_CHEAT_MONEY :{LTBLUE}Suen ë STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Als Firma {ORANGE}{COMMA} spillen STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Magësche Bulldozer (Industrien ofrappen, onzerstéierbar Objeten): {ORANGE}{STRING} STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Tunnelle kënne sech kräizen: {ORANGE}{STRING} -STR_CHEAT_NO_JETCRASH :{LTBLUE}Jet'en maachen net regelméisseg en Akzident op klenge Fluchhäfen: {ORANGE} {STRING} +STR_CHEAT_NO_JETCRASH :{LTBLUE}Jete maache net regelméisseg en Accident op klenge Fluchhäfen: {ORANGE} {STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Änner d'Maximalhéicht vu Bierger op der Kaart: {ORANGE}{NUM} STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Änner d'Maximalhéicht vu Bierger op der Kaart STR_CHEAT_SWITCH_CLIMATE_TEMPERATE_LANDSCAPE :Gemässegt Klima Landschaft @@ -2082,6 +2104,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Verbindu STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Server ass geschützt. Passwuert aginn STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Firma ass geschützt. Passwuert aginn +STR_NETWORK_COMPANY_LIST_CLIENT_LIST_CAPTION :{WHITE}Spillerlëscht # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Spillerlëscht @@ -2130,7 +2153,7 @@ STR_NETWORK_CHAT_ALL :[All] {STRING}: STR_NETWORK_CHAT_OSKTITLE :{BLACK}Text fir Chat aginn # Network messages -STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Keng Netzwierkgeräter fonnt oder compiléiert ouni ENABLE_NETWORK +STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Keng Netzwierkgeräter fonnt STR_NETWORK_ERROR_NOSERVER :{WHITE}Konnt keng Netzwierkspiller fannen STR_NETWORK_ERROR_NOCONNECTION :{WHITE}De Server huet net op d'Ufro geäntwert STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Konnt sech wéinst ënnerscheedlechen NewGRF net connectéieren @@ -2254,7 +2277,7 @@ STR_CONTENT_TYPE_NEWGRF :NewGRF STR_CONTENT_TYPE_AI :KI STR_CONTENT_TYPE_AI_LIBRARY :KI Librairie STR_CONTENT_TYPE_SCENARIO :Szenario -STR_CONTENT_TYPE_HEIGHTMAP :Héischtekaart +STR_CONTENT_TYPE_HEIGHTMAP :Héichtekaart STR_CONTENT_TYPE_BASE_SOUNDS :Basis Sounds STR_CONTENT_TYPE_BASE_MUSIC :Basis Musik STR_CONTENT_TYPE_GAME_SCRIPT :Spill-Script @@ -2297,6 +2320,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Cargo Fl STR_LINKGRAPH_LEGEND_ALL :{BLACK}All STR_LINKGRAPH_LEGEND_NONE :{BLACK}Keng STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Wiel d'Firmen aus déi ugewise ginn +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}onbenotzt @@ -2381,9 +2405,9 @@ STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Combo-Si STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Wee-Signal (Elektresch){}E Wee-Signal erlaabt méi wéi engem Zuch an e Block eranzefueren, wann den Zuch e Wee op en Stop-Punkt reservéiren kann. Standard Wee-Signaler kënne vu béide Säiten duerchfuer ginn STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Einbahn-Wee-Signal (Elektresch){}En Einbahn-Signal erlaabt méi wéi een Zuch zur selwechter Zäit an engem Block ze sin, wann den Zuch en Wee op en sécheren Stop-Punkt reservéiren kann. Einbahn-Signaler kënnen net vun der falscher Säit duerchfuer ginn STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Signal konvertéiren{}Wann gewielt, gëtt en geklickten Signal an dat gewielten Signal konvertéiert, Ctrl+Klick wiesselt tëscht de Varianten. Shift weist ongeféier Konvertéirungskäschten -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Dicht vu Signaler beim Zéien +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Distanz vu Signaler beim Zéien STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Setzt Signaldistanz erof -STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Setzt Signaldicht erop +STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Setzt Signaldistanz erop # Bridge selection window STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Zuchbréck auswielen @@ -2405,7 +2429,7 @@ STR_BRIDGE_TUBULAR_SILICON :Rouer, Silikon STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Stroossebau STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Tramkonstruktioun STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Baut Stroossen.Ctrl+Klick wiësselt tëscht Stroosse bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Tramschinne bauen. Ctrl+Klick wiësselt tëscht Tramschinne bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Tramwayschinne bauen. Ctrl+Klick wiësselt tëscht Tramwayschinne bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}D'Strooss mat der Bau-Automatik bauen. Ctrl wiësselt tëscht Stroossen bauen/ofrappen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Tramschinne mam "Autotram" Modus bauen. Ctrl wiesselt tëscht Tramschinne bauen/ofrappen. Shift wiesselt tëschtbauen/ongeféier Käschten uweisen STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Baut Stroossendepot (fir Gefierer ze kafen an ze flécken). Shift wiesselt tëscht bauen/ongeféier Käschten uweisen @@ -2421,7 +2445,11 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Baut Str STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Tramtunnel bauen. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Wiesselt bauen/ofrappen vu Stroossekonstruktiounen STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Wiesselt tëscht bauen/ofrappen beim Trambau +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Konvertéier/upgrade den Typ vu Strooss. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Konvertéiert/upgrade den Typ vun Tram. Shift wiesselt tëscht bauen/ongeféier Käschten uweisen +STR_ROAD_NAME_ROAD :Strooss +STR_ROAD_NAME_TRAM :Tramway # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Ausriichtung vum Stroossendepot @@ -2522,7 +2550,7 @@ STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Setz d'L STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Huel all Grondstécker vun der Firma ewech STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Setz d'Landschaft zeréck -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Bass du sécher dass du all Grondstécker vun der Firma ewechhuelen wëlls? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Bass du sécher, dass du all Grondstécker vun der Firma ewechhuele wëlls? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Staderstellung @@ -2606,8 +2634,11 @@ STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Akzeptéiert Wuer: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Schinnentyp: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Stroossentyp: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Tramtyp: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Schinne-Geschw.-Limit: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Stroosse-Geschw.-Limit: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Tram-Geschw.-Limit: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Fielsen @@ -2647,7 +2678,7 @@ STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Strooss mat Luu STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Strooss mat Beem STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Stroossendepot STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Zuche/Stroosse-Barrière -STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Tram +STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Tramway # Houses come directly from their building names STR_LAI_TOWN_INDUSTRY_DESCRIPTION_UNDER_CONSTRUCTION :{STRING} (gëtt gebaut) @@ -2709,6 +2740,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Biller pro Sekonn STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Simulationsrat: {STRING} STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Unzuel Gameticks déi pro Sekonn simuléiert ginn. STR_FRAMERATE_RATE_BLITTER :{BLACK}Grafikframerate: {STRING} STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Unzuel u Videobiller déi pro Sekonn gerendert ginn. @@ -2716,21 +2748,32 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Aktuelle STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Wéi séier d'Spill aktuell leeft, am Verglach mat der Geschw. vun der normaler Simulatioun. STR_FRAMERATE_CURRENT :{WHITE}Aktuell STR_FRAMERATE_AVERAGE :{WHITE}Mëttel +STR_FRAMERATE_MEMORYUSE :{WHITE}Späicher +STR_FRAMERATE_DATA_POINTS :{BLACK}Date baséiert op {COMMA} Miessungen STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} ms STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} ms STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} ms STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} Biller/s STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} Biller/s STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} Biller/s +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} s ############ Leave those lines in this order!! STR_FRAMERATE_GAMELOOP :{BLACK}Spill total: -STR_FRAMERATE_GL_TRAINS :{BLACK} Zuchticks: -STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefierer Ticken: +STR_FRAMERATE_GL_ECONOMY :{BLACK} Wuerenhandling: +STR_FRAMERATE_GL_TRAINS :{BLACK} Zuchticker: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Stroossegefier-Ticker: +STR_FRAMERATE_GL_SHIPS :{BLACK} Schëffticker: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Fligerticker: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Weltticker: STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Linkgrafik-Verzögerung: STR_FRAMERATE_DRAWING :{BLACK}Grafikrendering: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Welt-Usiichten: STR_FRAMERATE_VIDEO :{BLACK}Video-output: +STR_FRAMERATE_SOUND :{BLACK}Soundmixing: STR_FRAMERATE_ALLSCRIPTS :{BLACK} GS/KI Total: STR_FRAMERATE_GAMESCRIPT :{BLACK} Gamescript: STR_FRAMERATE_AI :{BLACK} KI {NUM} {STRING} @@ -2738,10 +2781,12 @@ STR_FRAMERATE_AI :{BLACK} KI {N ############ Leave those lines in this order!! STR_FRAMETIME_CAPTION_GAMELOOP :Spill-Loop STR_FRAMETIME_CAPTION_GL_ECONOMY :Wuerenhandling -STR_FRAMETIME_CAPTION_GL_TRAINS :Zuchticks +STR_FRAMETIME_CAPTION_GL_TRAINS :Zuchticker STR_FRAMETIME_CAPTION_GL_ROADVEHS :Stroossegefierer Ticken STR_FRAMETIME_CAPTION_GL_SHIPS :Schëffticker -STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Weltticks +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Fligerticker +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Weltticker +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Linkgrafik Verzögerung STR_FRAMETIME_CAPTION_DRAWING :Grafikrendering STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Weltusiicht-Rendering STR_FRAMETIME_CAPTION_VIDEO :Video-output @@ -2776,6 +2821,7 @@ STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: {WHITE}{STRING} STR_SAVELOAD_FILTER_TITLE :{BLACK}Filter-String: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Datei iwwerschreiwen +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Bass du sécher, dass du d'existéirend Datei iwwerschreiwe wëlls? STR_SAVELOAD_OSKTITLE :{BLACK}Gëff dem Spillstand en Numm @@ -2803,7 +2849,7 @@ STR_MAPGEN_VARIETY :{BLACK}Vielfalt STR_MAPGEN_GENERATE :{WHITE}Generéiren # Strings for map borders at game generation -STR_MAPGEN_BORDER_TYPE :{BLACK}Kaartenenner: +STR_MAPGEN_BORDER_TYPE :{BLACK}Kaarteränner: STR_MAPGEN_NORTHWEST :{BLACK}Nordwest STR_MAPGEN_NORTHEAST :{BLACK}Nordost STR_MAPGEN_SOUTHEAST :{BLACK}Südost @@ -2896,6 +2942,7 @@ STR_NEWGRF_SETTINGS_PALETTE :{BLACK}Palette: STR_NEWGRF_SETTINGS_PALETTE_DEFAULT :Standard (S) STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :Standard (S) / 32 bpp STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Legacy (W) +STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Legacy (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Parameter: {SILVER}{STRING} STR_NEWGRF_SETTINGS_PARAMETER_NONE :Keng @@ -2979,6 +3026,7 @@ STR_NEWGRF_ERROR_GRM_FAILED :Ugefroten GRF R STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} gouf ausgeschalt vun {STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/onbekannten Sprite Layout Format (Sprite {3:NUM}) STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Zevill Elementer an der Eegeschaftewert-Lëscht (Sprite {3:NUM}, Eegeschaft {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Ongültegen Industrie-production callback (sprite {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Opgepasst! @@ -3010,6 +3058,7 @@ STR_NEWGRF_BUGGY :{WHITE}NewGRF ' STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Cargo/refit Informatioun fir '{1:ENGINE}' ass anescht wéi an der Kaflëscht no der Constructioun. Dëst kann en Autoerneirung/-ersetzen Fehler oprufen STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' huet eng Endlosschläif am Production callback verursaacht STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Callback {1:HEX} huet en onbekannten/invalid Resultat {2:HEX} +STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' huet en ongültegen Wuerentyp am Production-callback bei {2:HEX} # 'User removed essential NewGRFs'-placeholders for stuff without specs STR_NEWGRF_INVALID_CARGO : @@ -3076,6 +3125,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Stad ëmbenenne # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}Gemeng {TOWN} +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zone +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Weis d'Zone vun de Gemengegrenzen STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Transportfirme-Bewäertung: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Verfügbar Aktiounen: @@ -3104,6 +3155,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW}D'Gemen # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY} Ziler STR_GOALS_SPECTATOR_CAPTION :{WHITE}Global Ziler +STR_GOALS_SPECTATOR :Global Ziler STR_GOALS_GLOBAL_TITLE :{BLACK}Global Ziler: STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Keng - @@ -3332,6 +3384,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Infrastr STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT :{GOLD}Schinnestécker: STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS :{WHITE}Signaler STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT :{GOLD}Stroossestécker: +STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT :{GOLD}Tramdeeler: STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT :{GOLD}Waasserfelder: STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Kanäl STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Statiounen: @@ -3342,7 +3395,12 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL :{WHITE}{CURRENC # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrien STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Keng - +STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportéiert){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} +STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} an nach {NUM} méi... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industrienimm - klick op en Numm fir d'Usiicht do drop ze zentréieren. Ctrl+Klick erstellt eng nei Usiicht op d'Industrie # Industry view @@ -3353,6 +3411,7 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Zentréi STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Produktiounslevel: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}D'Industrie annoncéiert dass se zougemaach gëtt +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Brauch: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Produzéiert: {YELLOW}{STRING}{STRING} STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} @@ -3437,9 +3496,11 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nei Monorailgef STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nei Magnéitbunngefierer STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nei Stroossegefierer +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nei Tramgefierer ############ range for vehicle availability starts STR_BUY_VEHICLE_TRAIN_ALL_CAPTION :Nei Zich +STR_BUY_VEHICLE_ROAD_VEHICLE_ALL_CAPTION :Nei Stroossegefierer STR_BUY_VEHICLE_SHIP_CAPTION :Nei Schëffer STR_BUY_VEHICLE_AIRCRAFT_CAPTION :Neie Fliger ############ range for vehicle availability ends @@ -3464,6 +3525,7 @@ STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Kapazit STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Ugedriwwen Waggonen: {GOLD}+{POWER}{BLACK} Gewiicht: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Embaubar zu: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :All Wuerentyp +STR_PURCHASE_INFO_NONE :Keng STR_PURCHASE_INFO_ALL_BUT :Alles ausser {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Max. Zéikraaft: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Distanz: {GOLD}{COMMA} Felder @@ -3490,6 +3552,8 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft da STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Keeft den ungewielte Fliger. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielten Zuch/Waggon kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielte Gefier kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielte Schëff kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Gewielte Fliger kafen an ëmbauen. Shift+Klick weist ongeféier Käschten ouni Kaf STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Ëmbenennen @@ -3602,10 +3666,12 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Meldung STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Mir hunn elo en neien {STRING} gebaut - bass du dorun interesséiert dëst Gefier 1 Joer exklusiv ze notzen, fir ze testen op et komplett maarträif ass? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :Lokomotiv +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :Elektresch Lokomotiv STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :Monorail Lokomotiv STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :Magnéitbunnlokomotiv STR_ENGINE_PREVIEW_ROAD_VEHICLE :Stroossegefier +STR_ENGINE_PREVIEW_TRAM_VEHICLE :Tram-Gefier STR_ENGINE_PREVIEW_AIRCRAFT :Fliger STR_ENGINE_PREVIEW_SHIP :Schëff @@ -3647,14 +3713,18 @@ STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Wiessel STR_REPLACE_ENGINES :Lokomotiven STR_REPLACE_WAGONS :Waggonen STR_REPLACE_ALL_RAILTYPE :All Zich +STR_REPLACE_ALL_ROADTYPE :All Stroossegefierer STR_REPLACE_HELP_RAILTYPE :{BLACK}Wielt de Schinnentyp fir déi Lokomotiven ausgetosch ginn +STR_REPLACE_HELP_ROADTYPE :{BLACK}Wielt de Stroossentyp fir déi d'Maschinnen ausgetosch ginn STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Weist un wellech Lokomotiv vun der lénks ugewielter Lokomotiv ausgetosch soll ginn, wann et zoutrëfft STR_REPLACE_RAIL_VEHICLES :Zich STR_REPLACE_ELRAIL_VEHICLES :Elektresch Zich STR_REPLACE_MONORAIL_VEHICLES :Monorail Gefierer STR_REPLACE_MAGLEV_VEHICLES :Magnéitbunn Gefierer +STR_REPLACE_ROAD_VEHICLES :Stroossegefierer +STR_REPLACE_TRAM_VEHICLES :Tram-Gefierer STR_REPLACE_REMOVE_WAGON :{BLACK}Waggon raushuelen: {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Mécht dass d'automatescht Austauschen d'Längt vum Zuch behält, an dem e Waggonen (vu lénks un) wechhëllt, wann d'Lok den Zuch ze laang mécht @@ -3705,7 +3775,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATE_START_STOP_TOOLTIP :{BLACK}Momentan # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Lueden / Entlueden STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Verloossen -STR_VEHICLE_STATUS_CRASHED :{RED}Akzident! +STR_VEHICLE_STATUS_CRASHED :{RED}Accident! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Pann STR_VEHICLE_STATUS_STOPPED :{RED}Gestoppt STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Stoppt, {VELOCITY} @@ -3994,7 +4064,7 @@ STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(fuer während STR_TIMETABLE_STAY_FOR :an bleif fir {STRING} STR_TIMETABLE_AND_TRAVEL_FOR :an ënnerwee während {STRING} STR_TIMETABLE_DAYS :{COMMA}{NBSP}D{P ag eeg} -STR_TIMETABLE_TICKS :{COMMA}{NBSP}Tick{P "" en} +STR_TIMETABLE_TICKS :{COMMA}{NBSP}Tick{P "" er} STR_TIMETABLE_TOTAL_TIME :{BLACK}Dësen Zäitplang brauch {STRING} fir faërdeg ze ginn STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Dësen Zäitplang brauch op manst {STRING} (net all geplangt) @@ -4106,6 +4176,12 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Wiel de STR_AI_LIST_CANCEL :{BLACK}Ofbriechen STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Script net änneren +STR_SCREENSHOT_CAPTION :{WHITE}E Screenshot maachen +STR_SCREENSHOT_SCREENSHOT :{BLACK}Normale Screenshot +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Voll gezoomte Screenshot +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Standard Zoom-Screenshot +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Screenshot vun der ganzer Kaart +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Héichtekaartscreenshot # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameter @@ -4201,7 +4277,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Matdeel # Generic construction errors STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Ausserhalb vun der Kaart -STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Ze noo um Rand vun der Kaart +STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Ze no um Rand vun der Kaart STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Net genuch Geld - des Aktioun kascht {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}D'Land muss flaach sinn STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Land ass an déi falsch Richtung geneigt @@ -4256,8 +4332,8 @@ STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Ka keng STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Kann d'Stad net ëmbenennen... STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Kann d'Stad hei net bauen... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Kann d'Stad net vergréisseren... -STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ze noo um Enn vun der Kaart -STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ze noo un enger anerer Stad +STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... ze no um Rand vun der Kaart +STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... ze no un enger anerer Stad STR_ERROR_TOO_MANY_TOWNS :{WHITE}... ze vill Stied STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... et ass keng Plaz méi op der Kaart STR_ERROR_TOWN_EXPAND_WARN_NO_ROADS :{WHITE}Stied bauen keng Stroossen. Du kanns de Bau iwwert Astellungen->Economie->Stied aschalten @@ -4270,7 +4346,7 @@ STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... zevi STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Kann keng Industrien bauen... STR_ERROR_CAN_T_BUILD_HERE :{WHITE}Kann {STRING} net hei bauen... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Kann deen Industrietyp hei net bauen... -STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... ze noo bei enger anerer Fabrik +STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... ze no bei enger anerer Fabrik STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... muss fir d'éischt eng Stad bauen STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... nëmmen 1 pro Stad erlaabt STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... kann nëmmen an Stied mat op mannst 1200 Anwunner gebaut ginn @@ -4302,8 +4378,8 @@ STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Ze vill STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Ze vill Garesdeeler STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Ze vill Busarrêten STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Ze vill Camionsgaren -STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ze noo un engem aanerem Hafen -STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ze noo un engem aaneren Fluchhafen +STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Ze no un engem aaneren Hafen +STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Ze no un engem aanere Fluchhafen STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Kann d'Statioun net ëmbenennen... STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... d'Strooss ass am Besëtz vun der Stad STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... Strooss geet an dei falsch Richtung @@ -4378,7 +4454,8 @@ STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Signaler STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Keng gëeegent Schinnen STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}D'Schinne musse fir d'éischt ewech STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}D'Strooss ass eng Einbahn oder blockéiert -STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Barrièren si fir dësen Schinnentyp net erlaabt +STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Barrière si fir dëse Schinnentyp net erlaabt +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Barrière si fir dëse Stroossentyp net erlaabt STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Kann d'Signaler hei net bauen... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Kann d'Schinnen hei net bauen... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Kann d'Schinnen hei net ewech huelen... @@ -4393,11 +4470,17 @@ STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Kann de STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Muss d'Strooss ewech huelen STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... Einbahnstroossen kënnen keng Kräizung hunn STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Kann d'Strooss hei net bauen... -STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kann den Tram hei net bauen... +STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Kann Tramway hei net bauen... STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Kann d'Strooss hei net ewech huelen... -STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kann den Tram net ewech huelen... +STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Kann den Tramway net ewech huelen... STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... et ass keng Strooss do -STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... et ass keen Tram do +STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... et ass keen Tramway do +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Kann den Gefiertyp hei net konvertéiren... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Kann den Tramwaytyp hei net konvertéiren... +STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Keng geeegent Strooss +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Kee passenden Tramway +STR_ERROR_INCOMPATIBLE_ROAD :{WHITE}... inkompatibel Strooss +STR_ERROR_INCOMPATIBLE_TRAMWAY :{WHITE}... inkompatiblen Tramway # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Kann hei keen Kanal bauen... diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index a579bec4da..c6a0c5021d 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -263,7 +263,7 @@ STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP_TOOLTIP :{BLACK}Activar STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT_TOOLTIP :{BLACK}Activar para mostrar también las aeronaves ocultas # Query window -STR_BUTTON_DEFAULT :{BLACK}Predeterminado +STR_BUTTON_DEFAULT :{BLACK}Por defecto STR_BUTTON_CANCEL :{BLACK}Cancelar STR_BUTTON_OK :{BLACK}Aceptar STR_WARNING_PASSWORD_SECURITY :{YELLOW}Advertencia: los administradores del servidor tienen acceso al texto escrito aquí @@ -1115,7 +1115,7 @@ STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Filtrar STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Desplegar todo STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Plegar todo STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(no hay explicación disponible) -STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor predeterminado: {ORANGE}{STRING} +STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Valor por defecto: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Tipo de opción: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Opción de cliente (no se almacena en partidas guardadas, afecta todas las partidas) STR_CONFIG_SETTING_TYPE_GAME_MENU :Opción de partida (se almacena en las partidas guardadas, afecta solamente partidas nuevas) @@ -1125,11 +1125,11 @@ STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Opción de empr STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Categoría: STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Tipo: -STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Mostrar lista con opciones predeterminadas +STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Restringir lista de opciones a los filtros predefinidos STR_CONFIG_SETTING_RESTRICT_BASIC :Básico (mostrar solo las opciones más esenciales) STR_CONFIG_SETTING_RESTRICT_ADVANCED :Avanzado (mostrar la mayoría de las opciones) STR_CONFIG_SETTING_RESTRICT_ALL :Experto (mostrar todas las opciones, incluso las avanzadas) -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Opciones con un valor diferente al predeterminado +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Opciones con un valor diferente al valor por defecto STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Opciones con un valor diferente a las opciones de partida nueva STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Restringir la lista a ciertos tipos de opciones @@ -1237,7 +1237,7 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :A la derecha STR_CONFIG_SETTING_SHOWFINANCES :Mostrar ventana de finanzas al final del año: {STRING} STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Si se activa, la ventana de finanzas aparecerá al final de cada año para permitir realizar una inspección más fácil del estado financiero de la empresa STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Toda nueva orden es 'Sin paradas' por defecto: {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Generalmente, un tren se detendrá en cada estación por la que pase. Si se activa esta opción, pasará sin detenerse a través de todas las estaciones hasta llegar a su destino. Esta opción solamente define el valor predeterminado de las órdenes nuevas. Es posible especificar para cada orden el comportamiento deseado +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Un vehículo hace parada en cada estación por la que pasa, pero al activar esta opción el vehículo seguirá de largo hasta llegar a su destino. Esta opción solamente define el valor por defecto para nuevas órdenes, pero cada orden individual puede ajustarse según la acción deseada STR_CONFIG_SETTING_STOP_LOCATION :Todos los nuevos trenes paran por defecto en el {STRING} del andén STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :En qué parte predeterminada del andén se detendrán los trenes. En el 'principio' el tren se detiene cerca del punto de entrada, en el 'mitad' se detiene en el punto medio del andén y en el 'fondo' se detiene lejos del punto de entrada. Esta opción solamente define el valor predeterminado de las órdenes nuevas. Es posible especificar para cada orden el comportamiento deseado STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :principio @@ -1479,7 +1479,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Activar esta op STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Desactivar barcos para la computadora: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Activar esta opción deshabilita la construcción de barcos por jugadores no humanos -STR_CONFIG_SETTING_AI_PROFILE :Perfil predeterminado: {STRING} +STR_CONFIG_SETTING_AI_PROFILE :Perfil por defecto: {STRING} STR_CONFIG_SETTING_AI_PROFILE_HELPTEXT :Perfil para los jugadores no humanos aleatorios, o para los valores iniciales al añadir un nuevo jugador no humano o un script de juego STR_CONFIG_SETTING_AI_PROFILE_EASY :Fácil STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Intermedio @@ -1550,6 +1550,10 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Completo STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Noticias a color aparecen en el año: {STRING} STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Año en el que los periódicos comenzarán a imprimirse a color. Antes de ese año, apacerán en blanco y negro STR_CONFIG_SETTING_STARTING_YEAR :Fecha de inicio: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Año de fin de juego: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Año en el que se termina el juego para registrar la puntuación de la empresa y mostrar la tabla de puntuaciones, aunque el jugador puede continuar el juego.{}Cualquier fecha anterior al año de incio hará que la tabla de puntuaciones nunca se muestre. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nunca STR_CONFIG_SETTING_SMOOTH_ECONOMY :Activar economía fácil (cambios más pequeños): {STRING} STR_CONFIG_SETTING_SMOOTH_ECONOMY_HELPTEXT :Al activarse, habrá cambios de producción en las industrias más frecuentemente y en escala menor. Si se usa un NewGRF con industrias adicionales esta opción generalmente no tiene efecto STR_CONFIG_SETTING_ALLOW_SHARES :Permitir comprar acciones de otras empresas: {STRING} @@ -1567,7 +1571,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Señales mecán STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Año a partir del cual se usarán señales eléctricas. Antes de ese año se usarán señales mecánicas, las cuales funcionan igual pero tienen distinto aspecto STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar interfaz de señales: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar una ventana para elegir los tipos de señales a instalar. Si no se activa, se instalan las señales y se selecciona un tipo determinado mediante Ctrl+Clic, sin que aparezca ninguna interfaz -STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal predeterminada a instalar: {STRING} +STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal a instalar por defecto: {STRING} STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal predeterminada a utilizar STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de tramo STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Señales de ruta @@ -1665,7 +1669,7 @@ STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Con un valor di STR_CONFIG_SETTING_DEMAND_SIZE :Cantidad de cargamento a devolver en modo simétrico: {STRING} STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Establecer un valor menor de 100% hará que la distribución simétrica de cargamento sea más asimétrica. Se enviará menos cargamento de regreso forzosamente si una cantidad determinada es enviada a una estación. Si se fija a 0%, la distribución simétrica será como una distribución asimétrica STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Nivel de saturación de rutas cortas antes de cambiar a rutas de mayor capacidad: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Entre dos estaciones usualmente hay más de una ruta posible. Se intentarán saturar las rutas más cotas primero, luego las que le siguen, y así sucesivamente. La saturación está determinada por una estimación de capacidad y uso planificado. Una vez que se hayan saturado todas las rutas, si todavía hay demanda se sobrecargarán los caminos empezando por aquellos de mayor capacidad. El algoritmo no siempre estimará la capacidad de forma precisa. Esta opción permite especificar el porcentaje de saturación que debe tener una ruta en el primer análisis antes de pasar a la siguiente ruta. Ponerlo a menos de 100% permite evitar estaciones sobrecargadas en el caso de que se sobreestimen las capacidades +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Entre dos estaciones usualmente hay más de una ruta posible. Se intentarán saturar las rutas más cortas primero, luego las que les siguen, y así sucesivamente. La saturación está determinada por una estimación de capacidad y uso planificado. Una vez que se hayan saturado todas las rutas, si todavía hay demanda se sobrecargarán los caminos empezando por aquellos de mayor capacidad. El algoritmo no siempre estimará la capacidad de forma precisa. Esta opción permite especificar el porcentaje de saturación que debe tener una ruta en el primer análisis antes de pasar a la siguiente ruta. Ponerlo a menos de 100% permite evitar estaciones sobrecargadas en el caso de que se sobreestimen las capacidades 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 @@ -2126,7 +2130,7 @@ STR_NETWORK_GIVE_MONEY_CAPTION :{WHITE}Introduc STR_COMPANY_PASSWORD_CANCEL :{BLACK}No guardar la contraseña introducida STR_COMPANY_PASSWORD_OK :{BLACK}Asignar a la empresa la nueva contraseña STR_COMPANY_PASSWORD_CAPTION :{WHITE}Contraseña de la empresa -STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Contraseña predeterminada de la empresa +STR_COMPANY_PASSWORD_MAKE_DEFAULT :{BLACK}Contraseña por defecto de la empresa STR_COMPANY_PASSWORD_MAKE_DEFAULT_TOOLTIP :{BLACK}Usar la contraseña de esta empresa para cualquier otra nueva empresa # Network company info join/password @@ -4173,6 +4177,12 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Elegir e STR_AI_LIST_CANCEL :{BLACK}Cancelar STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}No cambiar de script +STR_SCREENSHOT_CAPTION :{WHITE}Tomar captura de pantalla +STR_SCREENSHOT_SCREENSHOT :{BLACK}Captura normal +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Acercamiento máximo +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Acercamiento por defecto +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Mapa completo +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Mapa de alturas # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}Parámetros {STRING} @@ -4257,7 +4267,7 @@ STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Solament # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Captura de pantalla gigante -STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}La captura de pantalla tendrá una resolución {COMMA}×{COMMA} pixeles. Realizar la captura puede llevar un tiempo. ¿Continuar? +STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}La captura de pantalla tendrá una resolución {COMMA}×{COMMA} pixeles, y puede tardar un poco en realizarse. ¿Continuar? STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Captura de pantalla guardada exitosamente en '{STRING}' STR_ERROR_SCREENSHOT_FAILED :{WHITE}¡La captura de pantalla falló! From 9e7c5235e89095b328bdd9528984a19e1716aac7 Mon Sep 17 00:00:00 2001 From: SamuXarick <43006711+SamuXarick@users.noreply.github.com> Date: Fri, 3 Jan 2020 00:04:39 +0000 Subject: [PATCH 67/84] Fix #7891: Actually check the vehicle type before casting --- src/vehicle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 806bf47959..2c57d970de 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1785,7 +1785,7 @@ bool CanBuildVehicleInfrastructure(VehicleType type, byte subtype) /* We should be able to build infrastructure when we have the actual vehicle type */ for (const Vehicle *v : Vehicle::Iterate()) { - if (type == VEH_ROAD && GetRoadTramType(RoadVehicle::From(v)->roadtype) != (RoadTramType)subtype) continue; + if (v->type == VEH_ROAD && GetRoadTramType(RoadVehicle::From(v)->roadtype) != (RoadTramType)subtype) continue; if (v->owner == _local_company && v->type == type) return true; } From e7922cd078837567ca5fb2c82a585fdada71f2b8 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 3 Jan 2020 19:45:40 +0100 Subject: [PATCH 68/84] Update: Translations from eints spanish (mexican): 18 changes by Absay --- src/lang/spanish_MX.txt | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index c6a0c5021d..1ac2f7bce8 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -243,8 +243,8 @@ STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Cerrar v STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Título de la ventana (arrastrar para mover) STR_TOOLTIP_SHADE :{BLACK}Ocultar ventana (mostrar solo título) STR_TOOLTIP_DEBUG :{BLACK}Mostrar información de depuración de NewGRF -STR_TOOLTIP_DEFSIZE :{BLACK}Cambiar al tamaño predeterminado de la ventana. Ctrl+Clic guarda el tamaño actual como nuevo tamaño predeterminado -STR_TOOLTIP_STICKY :{BLACK}Excluir esta ventana de la función 'Cerrar todas las ventanas' (tecla Supr). Ctrl+Clic guarda esta preferencia como opción predeterminada +STR_TOOLTIP_DEFSIZE :{BLACK}Cambiar al tamaño por defecto de la ventana. Ctrl+Clic guarda el tamaño actual como nuevo tamaño por defecto +STR_TOOLTIP_STICKY :{BLACK}Excluir esta ventana de la función de la tecla "Cerrar todas las ventanas". Ctrl+Clic guarda esta preferencia como opción por defecto STR_TOOLTIP_RESIZE :{BLACK}Arrastrar para cambiar el tamaño de esta ventana STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Cambiar entre tamaño de ventana grande o pequeño STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Barra de desplazamiento (mueve la lista arriba o abajo) @@ -1239,7 +1239,7 @@ STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Si se activa, l STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Toda nueva orden es 'Sin paradas' por defecto: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Un vehículo hace parada en cada estación por la que pasa, pero al activar esta opción el vehículo seguirá de largo hasta llegar a su destino. Esta opción solamente define el valor por defecto para nuevas órdenes, pero cada orden individual puede ajustarse según la acción deseada STR_CONFIG_SETTING_STOP_LOCATION :Todos los nuevos trenes paran por defecto en el {STRING} del andén -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :En qué parte predeterminada del andén se detendrán los trenes. En el 'principio' el tren se detiene cerca del punto de entrada, en el 'mitad' se detiene en el punto medio del andén y en el 'fondo' se detiene lejos del punto de entrada. Esta opción solamente define el valor predeterminado de las órdenes nuevas. Es posible especificar para cada orden el comportamiento deseado +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Altura por defecto del andén a la que para un tren: en el "principio" el tren para cerca de la entrada; en el "centro", el tren para en medio del andén; en el "fondo", el tren para cerca de la salida. Esta opción solamente define el valor por defecto para nuevas órdenes, pero cada orden individual puede ajustarse según la acción deseada STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :principio STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :centro STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :fondo @@ -1430,8 +1430,8 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Mostrar salidas STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Mostrar tiempos anticipados de llegadas y salidas en los itinerarios STR_CONFIG_SETTING_QUICKGOTO :Creación rápida de órdenes para vehículos: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Elegir automáticamente la opción 'Ir a' al abrir la ventana de órdenes -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo predeterminado de vías férreas al iniciar o cargar un juego: {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo predeterminado de vías de tren al iniciar o cargar un juego. 'Primero disponible' elige el tipo más viejo, 'Último disponible' elige el tipo más nuevo y 'Más usado' elige el tipo de mayor uso al momento +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Tipo de vías por defecto al iniciar o cargar un juego: {STRING} +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Tipo de vías de tren por defecto al iniciar o cargar un juego. "Primero disponible" elige el tipo más viejo, "Último disponible" elige el tipo más nuevo y "Más usado" elige el tipo de mayor uso al momento STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Primero disponible STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Último disponible STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Más usado @@ -1495,16 +1495,16 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervalo de mantenimiento en porcentajes: {STRING} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Escoger si el mantenimiento de vehículos comenzará debido al tiempo pasado desde el último mantenimiento o por una reducción de la fiabilidad menor de un porcentaje determinado -STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo de mantenimiento predeterminado para trenes: {STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevos trenes, en caso de no definirse otro explícitamente +STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalo de mantenimiento por defecto para trenes: {STRING} +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Intervalo de mantenimiento por defecto para nuevos trenes, en caso de no definirse otro explícitamente STR_CONFIG_SETTING_SERVINT_VALUE :{COMMA}{NBSP}día{P 0 "" s}/% STR_CONFIG_SETTING_SERVINT_DISABLED :Deshabilitado -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalo de mantenimiento predeterminado para vehículos de carretera: {STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevos vehículos de carretera, en caso de no definirse otro explícitamente -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de mantenimiento predeterminado para aeronaves: {STRING} -STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevas aeronaves, en caso de no definirse otro explícitamente -STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantenimiento predeterminado para barcos: {STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Intervalo de mantenimiento predeterminado para nuevos barcos, en caso de no definirse otro explícitamente +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :Intervalo de mantenimiento por defecto para vehículos de carretera: {STRING} +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :Intervalo de mantenimiento por defecto para nuevos vehículos de carretera, en caso de no definirse otro explícitamente +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :Intervalo de mantenimiento por defecto para aeronaves: {STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Intervalo de mantenimiento por defecto para nuevas aeronaves, en caso de no definirse otro explícitamente +STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalo de mantenimiento por defecto para barcos: {STRING} +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Intervalo de mantenimiento por defecto para nuevos barcos, en caso de no definirse otro explícitamente STR_CONFIG_SETTING_NOSERVICE :Desactivar mantenimiento si las averías están desactivadas: {STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Al activarse, los vehículos no recibirán mantenimiento si no pueden averiarse STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Activar límites de velocidad para vagones: {STRING} @@ -1572,7 +1572,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Año a partir d STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI :Activar interfaz de señales: {STRING} STR_CONFIG_SETTING_ENABLE_SIGNAL_GUI_HELPTEXT :Mostrar una ventana para elegir los tipos de señales a instalar. Si no se activa, se instalan las señales y se selecciona un tipo determinado mediante Ctrl+Clic, sin que aparezca ninguna interfaz STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE :Tipo de señal a instalar por defecto: {STRING} -STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal predeterminada a utilizar +STR_CONFIG_SETTING_DEFAULT_SIGNAL_TYPE_HELPTEXT :Tipo de señal por defecto STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :Señales de tramo STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :Señales de ruta STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :Señales de ruta de un sentido @@ -2388,7 +2388,7 @@ STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construi STR_STATION_BUILD_STATION_CLASS_TOOLTIP :{BLACK}Mostrar el tipo de estación elegida STR_STATION_BUILD_STATION_TYPE_TOOLTIP :{BLACK}Construir el tipo de estación elegida -STR_STATION_CLASS_DFLT :Estación predeterminada +STR_STATION_CLASS_DFLT :Estación por defecto STR_STATION_CLASS_WAYP :Puntos guías # Signal window @@ -2805,7 +2805,7 @@ STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Guardar STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Cargar mapa STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Cargar mapa de alturas STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Guardar mapa de alturas -STR_SAVELOAD_HOME_BUTTON :{BLACK}Clic para ir a la carpeta de guardado predeterminada +STR_SAVELOAD_HOME_BUTTON :{BLACK}Clic para ir a la carpeta de guardado por defecto STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} libres STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Lista de unidades de almacenamiento, carpetas y partidas guardadas STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Nombre elegido para la partida a guardar @@ -3833,7 +3833,7 @@ STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Incremen STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP :{BLACK}Reducir intervalo de mantenimiento 10 días. Ctrl+Clic para reducir el intervalo de mantenimiento 5 días STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Cambiar tipo de intervalo de mantenimiento -STR_VEHICLE_DETAILS_DEFAULT :Predeterminado +STR_VEHICLE_DETAILS_DEFAULT :Por defecto STR_VEHICLE_DETAILS_DAYS :Días STR_VEHICLE_DETAILS_PERCENT :Porcentaje @@ -4134,7 +4134,7 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Mostrar STR_AI_GAME_SCRIPT :{BLACK}Script de juego STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Analizar el registro del script de juego -STR_ERROR_AI_NO_AI_FOUND :No se encontró IA apropiada para cargar.{}Esta es una IA predeterminada que no realiza ninguna acción.{}Se pueden descargar nuevas IA a través del sistema de 'Contenido en línea' +STR_ERROR_AI_NO_AI_FOUND :No se encontró ninguna IA apropiada para cargar.{}Esta es una IA estándar que no hace nada.{}Se pueden descargar nuevas IA desde el "Contenido en línea" STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Uno de los scripts ejecutados ha fallado. Por favor, informa del fallo al autor del script con una captura de la ventana de depuración STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}La ventana de depuración de scripts solo está disponible para el servidor From e04ca904a9455afc63aa87db775fe4463ab899b7 Mon Sep 17 00:00:00 2001 From: TELK Date: Sun, 5 Jan 2020 01:47:37 +0900 Subject: [PATCH 69/84] Feature: Minimap screenshot --- src/console_cmds.cpp | 9 +++- src/gfx_func.h | 6 +++ src/lang/english.txt | 1 + src/screenshot.cpp | 83 ++++++++++++++++++++++++++++++++ src/screenshot.h | 2 + src/screenshot_gui.cpp | 2 + src/script/api/script_window.hpp | 1 + src/smallmap_gui.cpp | 7 --- src/widgets/screenshot_widget.h | 1 + 9 files changed, 103 insertions(+), 9 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index f4d0626a5b..343524202b 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1349,10 +1349,11 @@ DEF_CONSOLE_CMD(ConAlias) DEF_CONSOLE_CMD(ConScreenShot) { if (argc == 0) { - IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | giant | no_con] [file name]'"); + IConsoleHelp("Create a screenshot of the game. Usage: 'screenshot [big | giant | no_con | minimap] [file name]'"); IConsoleHelp("'big' makes a zoomed-in screenshot of the visible area, 'giant' makes a screenshot of the " "whole map, 'no_con' hides the console to create the screenshot. 'big' or 'giant' " - "screenshots are always drawn without console"); + "screenshots are always drawn without console. " + "'minimap' makes a top-viewed minimap screenshot of whole world which represents one tile by one pixel."); return true; } @@ -1370,6 +1371,10 @@ DEF_CONSOLE_CMD(ConScreenShot) /* screenshot giant [filename] */ type = SC_WORLD; if (argc > 2) name = argv[2]; + } else if (strcmp(argv[1], "minimap") == 0) { + /* screenshot minimap [filename] */ + type = SC_MINIMAP; + if (argc > 2) name = argv[2]; } else if (strcmp(argv[1], "no_con") == 0) { /* screenshot no_con [filename] */ IConsoleClose(); diff --git a/src/gfx_func.h b/src/gfx_func.h index 5da0ff0cab..a0b46a477b 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -222,4 +222,10 @@ static const uint8 PC_GREEN = 0xD0; ///< Green palette co static const uint8 PC_DARK_BLUE = 0x9D; ///< Dark blue palette colour. static const uint8 PC_LIGHT_BLUE = 0x98; ///< Light blue palette colour. +static const uint8 PC_ROUGH_LAND = 0x52; ///< Dark green palette colour for rough land. +static const uint8 PC_GRASS_LAND = 0x54; ///< Dark green palette colour for grass land. +static const uint8 PC_BARE_LAND = 0x37; ///< Brown palette colour for bare land. +static const uint8 PC_FIELDS = 0x25; ///< Light brown palette colour for fields. +static const uint8 PC_TREES = 0x57; ///< Green palette colour for trees. +static const uint8 PC_WATER = 0xC9; ///< Dark blue palette colour for water. #endif /* GFX_FUNC_H */ diff --git a/src/lang/english.txt b/src/lang/english.txt index 4fd97c5397..36d0199ea6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -4182,6 +4182,7 @@ STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Fully zo STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Default zoom screenshot STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Whole map screenshot STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Heightmap screenshot +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Minimap screenshot # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parameters diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 60196cdf07..4a80a0cbfe 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -16,6 +16,7 @@ #include "zoom_func.h" #include "core/endian_func.hpp" #include "saveload/saveload.h" +#include "company_base.h" #include "company_func.h" #include "strings_func.h" #include "error.h" @@ -66,6 +67,8 @@ struct ScreenshotFormat { ScreenshotHandlerProc *proc; ///< Function for writing the screenshot. }; +#define MKCOLOUR(x) TO_LE32X(x) + /************************************************* **** SCREENSHOT CODE FOR WINDOWS BITMAP (.BMP) *************************************************/ @@ -842,6 +845,10 @@ bool MakeScreenshot(ScreenshotType t, const char *name) break; } + case SC_MINIMAP: + ret = MakeMinimapWorldScreenshot(); + break; + default: NOT_REACHED(); } @@ -855,3 +862,79 @@ bool MakeScreenshot(ScreenshotType t, const char *name) return ret; } + + +/** + * Return the owner of a tile to display it with in the small map in mode "Owner". + * + * @param tile The tile of which we would like to get the colour. + * @return The owner of tile in the small map in mode "Owner" + */ +static Owner GetMinimapOwner(TileIndex tile) +{ + Owner o; + + if (IsTileType(tile, MP_VOID)) { + return OWNER_END; + } else { + switch (GetTileType(tile)) { + case MP_INDUSTRY: o = OWNER_DEITY; break; + case MP_HOUSE: o = OWNER_TOWN; break; + default: o = GetTileOwner(tile); break; + /* FIXME: For MP_ROAD there are multiple owners. + * GetTileOwner returns the rail owner (level crossing) resp. the owner of ROADTYPE_ROAD (normal road), + * even if there are no ROADTYPE_ROAD bits on the tile. + */ + } + + return o; + } +} + +static void MinimapScreenCallback(void *userdata, void *buf, uint y, uint pitch, uint n) +{ + uint32 *ubuf; + uint num, row, col; + byte val; + byte owner_colours[OWNER_END + 1]; + + /* Fill with the company colours */ + for (const Company *c : Company::Iterate()) { + owner_colours[c->index] = MKCOLOUR(_colour_gradient[c->colour][5]); + } + + /* Fill with some special colours */ + owner_colours[OWNER_TOWN] = PC_DARK_RED; + owner_colours[OWNER_NONE] = PC_GRASS_LAND; + owner_colours[OWNER_WATER] = PC_WATER; + owner_colours[OWNER_DEITY] = PC_DARK_GREY; // industry + owner_colours[OWNER_END] = PC_BLACK; + + ubuf = (uint32 *)buf; + num = (pitch * n); + for (uint i = 0; i < num; i++) { + row = y + (int)(i / pitch); + col = (MapSizeX() - 1) - (i % pitch); + + TileIndex tile = TileXY(col, row); + Owner o = GetMinimapOwner(tile); + val = owner_colours[o]; + + uint32 colour_buf = 0; + colour_buf = (_cur_palette.palette[val].b << 0); + colour_buf |= (_cur_palette.palette[val].g << 8); + colour_buf |= (_cur_palette.palette[val].r << 16); + + *ubuf = colour_buf; + *ubuf++; // Skip alpha + } +} + +/** + * Make a minimap screenshot. + */ +bool MakeMinimapWorldScreenshot() +{ + const ScreenshotFormat *sf = _screenshot_formats + _cur_screenshot_format; + return sf->proc(MakeScreenshotName(SCREENSHOT_NAME, sf->extension), MinimapScreenCallback, nullptr, MapSizeX(), MapSizeY(), 32, _cur_palette.palette); +} diff --git a/src/screenshot.h b/src/screenshot.h index 7a08cd4fb6..aea08a8d5f 100644 --- a/src/screenshot.h +++ b/src/screenshot.h @@ -22,11 +22,13 @@ enum ScreenshotType { SC_DEFAULTZOOM, ///< Zoomed to default zoom level screenshot of the visible area. SC_WORLD, ///< World screenshot. SC_HEIGHTMAP, ///< Heightmap of the world. + SC_MINIMAP, ///< Minimap screenshot. }; void SetupScreenshotViewport(ScreenshotType t, struct ViewPort *vp); bool MakeHeightmapScreenshot(const char *filename); bool MakeScreenshot(ScreenshotType t, const char *name); +bool MakeMinimapWorldScreenshot(); extern char _screenshot_format_name[8]; extern uint _num_screenshot_formats; diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index bcbb93653e..72e118b51e 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -41,6 +41,7 @@ struct ScreenshotWindow : Window { case WID_SC_TAKE_DEFAULTZOOM: st = SC_DEFAULTZOOM; break; case WID_SC_TAKE_WORLD: st = SC_WORLD; break; case WID_SC_TAKE_HEIGHTMAP: st = SC_HEIGHTMAP; break; + case WID_SC_TAKE_MINIMAP: st = SC_MINIMAP; break; } TakeScreenshot(st); } @@ -87,6 +88,7 @@ static const NWidgetPart _nested_screenshot[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_DEFAULTZOOM), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT, 0), SetMinimalTextLines(2, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_WORLD), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_WORLD_SCREENSHOT, 0), SetMinimalTextLines(2, 0), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_HEIGHTMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_SC_TAKE_MINIMAP), SetFill(1, 1), SetDataTip(STR_SCREENSHOT_MINIMAP_SCREENSHOT, 0), SetMinimalTextLines(2, 0), EndContainer(), }; diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 9847f543bc..2b040c8c65 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -2186,6 +2186,7 @@ public: WID_SC_TAKE_DEFAULTZOOM = ::WID_SC_TAKE_DEFAULTZOOM, ///< Button for taking a screenshot at normal zoom WID_SC_TAKE_WORLD = ::WID_SC_TAKE_WORLD, ///< Button for taking a screenshot of the whole world WID_SC_TAKE_HEIGHTMAP = ::WID_SC_TAKE_HEIGHTMAP, ///< Button for taking a heightmap "screenshot" + WID_SC_TAKE_MINIMAP = ::WID_SC_TAKE_MINIMAP, ///< Button for taking a minimap screenshot }; /* automatically generated from ../../widgets/settings_widget.h */ diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp index 00f682f635..c4b650fc22 100644 --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -40,13 +40,6 @@ static uint8 _linkstat_colours_in_legenda[] = {0, 1, 3, 5, 7, 9, 11}; static const int NUM_NO_COMPANY_ENTRIES = 4; ///< Number of entries in the owner legend that are not companies. -static const uint8 PC_ROUGH_LAND = 0x52; ///< Dark green palette colour for rough land. -static const uint8 PC_GRASS_LAND = 0x54; ///< Dark green palette colour for grass land. -static const uint8 PC_BARE_LAND = 0x37; ///< Brown palette colour for bare land. -static const uint8 PC_FIELDS = 0x25; ///< Light brown palette colour for fields. -static const uint8 PC_TREES = 0x57; ///< Green palette colour for trees. -static const uint8 PC_WATER = 0xC9; ///< Dark blue palette colour for water. - /** Macro for ordinary entry of LegendAndColour */ #define MK(a, b) {a, b, INVALID_INDUSTRYTYPE, 0, INVALID_COMPANY, true, false, false} diff --git a/src/widgets/screenshot_widget.h b/src/widgets/screenshot_widget.h index 40a0da246c..6f42b784d6 100644 --- a/src/widgets/screenshot_widget.h +++ b/src/widgets/screenshot_widget.h @@ -18,6 +18,7 @@ enum ScreenshotWindowWidgets { WID_SC_TAKE_DEFAULTZOOM, ///< Button for taking a screenshot at normal zoom WID_SC_TAKE_WORLD, ///< Button for taking a screenshot of the whole world WID_SC_TAKE_HEIGHTMAP, ///< Button for taking a heightmap "screenshot" + WID_SC_TAKE_MINIMAP, ///< Button for taking a minimap screenshot }; From b524f1ae21487caf8ed460d8e20a51c3dd7e11a6 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Thu, 4 Apr 2019 23:06:38 +0200 Subject: [PATCH 70/84] Feature: Show the name of the NewGRF in the build vehicle window. --- src/build_vehicle_gui.cpp | 8 ++++++++ src/lang/english.txt | 2 ++ src/settings_gui.cpp | 1 + src/settings_type.h | 1 + src/table/settings.ini | 9 +++++++++ 5 files changed, 21 insertions(+) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index c457b0f195..c3252f7b9e 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -928,6 +928,14 @@ int DrawVehiclePurchaseInfo(int left, int right, int y, EngineID engine_number, /* Additional text from NewGRF */ y = ShowAdditionalText(left, right, y, engine_number); + /* The NewGRF's name which the vehicle comes from */ + const GRFConfig *config = GetGRFConfig(e->GetGRFID()); + if (_settings_client.gui.show_newgrf_name && config != nullptr) + { + DrawString(left, right, y, config->GetName(), TC_BLACK); + y += FONT_HEIGHT_NORMAL; + } + return y; } diff --git a/src/lang/english.txt b/src/lang/english.txt index 36d0199ea6..d0fa352bdf 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1312,6 +1312,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Show town popul STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Display the population of towns in their label on the map STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Thickness of lines in graphs: {STRING2} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Width of the line in the graphs. A thin line is more precisely readable, a thicker line is easier to see and colours are easier to distinguish +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Show the NewGRF's name in the build vehicle window +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Add a line to the build vehicle window, showing which NewGRF the selected vehicle comes from. STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING2} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargos and town growth requirements. NewGRF and Game Scripts allow finer control though diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 187ea28926..fbccc1d433 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1566,6 +1566,7 @@ static SettingsContainer &GetSettingsTree() interface->Add(new SettingEntry("gui.timetable_in_ticks")); interface->Add(new SettingEntry("gui.timetable_arrival_departure")); interface->Add(new SettingEntry("gui.expenses_layout")); + interface->Add(new SettingEntry("gui.show_newgrf_name")); } SettingsPage *advisors = main->Add(new SettingsPage(STR_CONFIG_SETTING_ADVISORS)); diff --git a/src/settings_type.h b/src/settings_type.h index 0bc5a1a68b..fdb2b0f862 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -145,6 +145,7 @@ struct GUISettings { uint8 graph_line_thickness; ///< the thickness of the lines in the various graph guis uint8 osk_activation; ///< Mouse gesture to trigger the OSK. byte starting_colour; ///< default color scheme for the company to start a new game with + bool show_newgrf_name; ///< Show the name of the NewGRF in the build vehicle window uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity. uint16 console_backlog_length; ///< the minimum amount of items in the console backlog before items will be removed. diff --git a/src/table/settings.ini b/src/table/settings.ini index 3e07fcc596..43bd3aec32 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -3240,6 +3240,15 @@ strhelp = STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT strval = STR_JUST_COMMA proc = RedrawScreen +[SDTC_BOOL] +var = gui.show_newgrf_name +flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC +def = false +str = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME +strhelp = STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT +proc = RedrawScreen +cat = SC_ADVANCED + ; For the dedicated build we'll enable dates in logs by default. [SDTC_BOOL] ifdef = DEDICATED From f40162214909116507811be4a1f5af9ec9d3ef97 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 4 Jan 2020 17:31:52 +0100 Subject: [PATCH 71/84] Feature: Script API to change town rating of companies --- src/command.cpp | 2 ++ src/command_type.h | 1 + src/script/api/game/game_town.hpp.sq | 2 ++ src/script/api/script_town.cpp | 27 ++++++++++++++++++++++++++ src/script/api/script_town.hpp | 24 +++++++++++++++++++++++ src/town_cmd.cpp | 29 ++++++++++++++++++++++++++++ 6 files changed, 85 insertions(+) diff --git a/src/command.cpp b/src/command.cpp index dd65fa36ea..ed4c457bc6 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -130,6 +130,7 @@ CommandProc CmdFoundTown; CommandProc CmdRenameTown; CommandProc CmdDoTownAction; CommandProc CmdTownGrowthRate; +CommandProc CmdTownRating; CommandProc CmdTownCargoGoal; CommandProc CmdTownSetText; CommandProc CmdExpandTown; @@ -295,6 +296,7 @@ static const Command _command_proc_table[] = { DEF_CMD(CmdDoTownAction, 0, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DO_TOWN_ACTION DEF_CMD(CmdTownCargoGoal, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_CARGO_GOAL DEF_CMD(CmdTownGrowthRate, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_GROWTH_RATE + DEF_CMD(CmdTownRating, CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_RATING DEF_CMD(CmdTownSetText, CMD_STR_CTRL | CMD_DEITY, CMDT_OTHER_MANAGEMENT ), // CMD_TOWN_SET_TEXT DEF_CMD(CmdExpandTown, CMD_DEITY, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_EXPAND_TOWN DEF_CMD(CmdDeleteTown, CMD_OFFLINE, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_DELETE_TOWN diff --git a/src/command_type.h b/src/command_type.h index 41f2360d8d..d03639367b 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -262,6 +262,7 @@ enum Commands { CMD_DO_TOWN_ACTION, ///< do a action from the town detail window (like advertises or bribe) CMD_TOWN_CARGO_GOAL, ///< set the goal of a cargo for a town CMD_TOWN_GROWTH_RATE, ///< set the town growth rate + CMD_TOWN_RATING, ///< set rating of a company in a town CMD_TOWN_SET_TEXT, ///< set the custom text of a town CMD_EXPAND_TOWN, ///< expand a town CMD_DELETE_TOWN, ///< delete a town diff --git a/src/script/api/game/game_town.hpp.sq b/src/script/api/game/game_town.hpp.sq index b97cb59d20..5cf394ca1c 100644 --- a/src/script/api/game/game_town.hpp.sq +++ b/src/script/api/game/game_town.hpp.sq @@ -79,6 +79,8 @@ void SQGSTown_Register(Squirrel *engine) SQGSTown.DefSQStaticMethod(engine, &ScriptTown::ExpandTown, "ExpandTown", 3, ".ii"); SQGSTown.DefSQStaticMethod(engine, &ScriptTown::FoundTown, "FoundTown", 6, ".iibi."); SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetRating, "GetRating", 3, ".ii"); + SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetDetailedRating, "GetDetailedRating", 3, ".ii"); + SQGSTown.DefSQStaticMethod(engine, &ScriptTown::ChangeRating, "ChangeRating", 4, ".iii"); SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetAllowedNoise, "GetAllowedNoise", 2, ".i"); SQGSTown.DefSQStaticMethod(engine, &ScriptTown::GetRoadLayout, "GetRoadLayout", 2, ".i"); diff --git a/src/script/api/script_town.cpp b/src/script/api/script_town.cpp index 1cb6e32bb1..afe5614566 100644 --- a/src/script/api/script_town.cpp +++ b/src/script/api/script_town.cpp @@ -336,6 +336,33 @@ } } +/* static */ int ScriptTown::GetDetailedRating(TownID town_id, ScriptCompany::CompanyID company_id) +{ + if (!IsValidTown(town_id)) return TOWN_RATING_INVALID; + ScriptCompany::CompanyID company = ScriptCompany::ResolveCompanyID(company_id); + if (company == ScriptCompany::COMPANY_INVALID) return TOWN_RATING_INVALID; + + const Town *t = ::Town::Get(town_id); + return t->ratings[company]; +} + +/* static */ bool ScriptTown::ChangeRating(TownID town_id, ScriptCompany::CompanyID company_id, int delta) +{ + EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY); + EnforcePrecondition(false, IsValidTown(town_id)); + ScriptCompany::CompanyID company = ScriptCompany::ResolveCompanyID(company_id); + EnforcePrecondition(false, company != ScriptCompany::COMPANY_INVALID); + + const Town *t = ::Town::Get(town_id); + int16 new_rating = Clamp(t->ratings[company] + delta, RATING_MINIMUM, RATING_MAXIMUM); + if (new_rating == t->ratings[company]) return false; + + uint16 p2 = 0; + memcpy(&p2, &new_rating, sizeof(p2)); + + return ScriptObject::DoCommand(0, town_id | (company_id << 16), p2, CMD_TOWN_RATING); +} + /* static */ int ScriptTown::GetAllowedNoise(TownID town_id) { if (!IsValidTown(town_id)) return -1; diff --git a/src/script/api/script_town.hpp b/src/script/api/script_town.hpp index 71fb5a712a..6ae7ee33f5 100644 --- a/src/script/api/script_town.hpp +++ b/src/script/api/script_town.hpp @@ -423,6 +423,30 @@ public: */ static TownRating GetRating(TownID town_id, ScriptCompany::CompanyID company_id); + /** + * Get the accurate rating of a company within a town. + * @param town_id The town to get the rating for. + * @param company_id The company to get the rating for. + * @pre IsValidTown(town_id). + * @pre ScriptCompany.ResolveCompanyID(company) != ScriptCompany::COMPANY_INVALID. + * @return The rating as a number between -1000 (worst) and 1000 (best). + * @api -ai + */ + static int GetDetailedRating(TownID town_id, ScriptCompany::CompanyID company_id); + + /** + * Change the rating of a company within a town. + * @param town_id The town to change the rating in. + * @param company_id The company to change the rating for. + * @param delta How much to change rating by (range -1000 to +1000). + * @return True if the rating was changed. + * @pre IsValidTown(town_id). + * @pre ScriptCompany.ResolveCompanyID(company) != ScriptCompany::COMPANY_INVALID. + * @pre no company mode in scope + * @api -ai + */ + static bool ChangeRating(TownID town_id, ScriptCompany::CompanyID company_id, int delta); + /** * Get the maximum level of noise that still can be added by airports * before the town start to refuse building a new airport. diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 7b1d5c90ff..31e11ae45f 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2804,6 +2804,35 @@ CommandCost CmdTownGrowthRate(TileIndex tile, DoCommandFlag flags, uint32 p1, ui return CommandCost(); } +/** + * Change the rating of a company in a town + * @param tile Unused. + * @param flags Type of operation. + * @param p1 Bit 0..15 = Town ID to change, bit 16..23 = Company ID to change. + * @param p2 Bit 0..15 = New rating of company (signed int16). + * @param text Unused. + * @return Empty cost or an error. + */ +CommandCost CmdTownRating(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text) +{ + if (_current_company != OWNER_DEITY) return CMD_ERROR; + + TownID town_id = (TownID)GB(p1, 0, 16); + Town *t = Town::GetIfValid(town_id); + if (t == nullptr) return CMD_ERROR; + + CompanyID company_id = (CompanyID)GB(p1, 16, 8); + if (!Company::IsValidID(company_id)) return CMD_ERROR; + + int16 new_rating = Clamp((int16)GB(p2, 0, 16), RATING_MINIMUM, RATING_MAXIMUM); + if (flags & DC_EXEC) { + t->ratings[company_id] = new_rating; + InvalidateWindowData(WC_TOWN_AUTHORITY, town_id); + } + + return CommandCost(); +} + /** * Expand a town (scenario editor only). * @param tile Unused. From 7be9c28037eeea718ea5b49aeb223a57a6c5c383 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 4 Jan 2020 19:45:39 +0100 Subject: [PATCH 72/84] Update: Translations from eints korean: 2 changes by telk5093 --- src/lang/korean.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 72bb66d9bd..907445e301 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -4179,8 +4179,8 @@ STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}인공 STR_SCREENSHOT_CAPTION :{WHITE}스크린 샷 찍기 STR_SCREENSHOT_SCREENSHOT :{BLACK}일반 스크린 샷 -STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}최대 확대 스크린 샷 -STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}기본 크기 스크린 샷 +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}최대 확대 스크린 샷 (UI 없음) +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}기본 확대 스크린 샷 (UI 없음) STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}지도 전체 스크린 샷 STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}높이맵 스크린 샷 From 12f4602f57f0f7461c83eaa21209587ad9643af2 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 5 Jan 2020 19:45:40 +0100 Subject: [PATCH 73/84] Update: Translations from eints finnish: 3 changes by hpiirai --- src/lang/finnish.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 1f2eabe0a8..70694037f1 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -1312,6 +1312,8 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL :Näytä kunnan STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Näytä kuntien asukasluvut kartalla STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Viivojen paksuus kuvaajissa: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Viivan leveys kuvaajissa. Ohut viiva on tarkasti luettavissa kun taas paksumpi viiva on helpompi nähdä ja sen värit ovat helpommin havaittavissa +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Näytä NewGRF:n nimi liikennevälineikkunassa +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Lisää liikennevälinevalikoimaikkunaan rivin, joka näyttää, mistä NewGRF:stä valittu liikenneväline on peräisin. STR_CONFIG_SETTING_LANDSCAPE :Maasto: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Maasto vaikuttaa useisiin pelin peruselementteihin, kuten rahtiin ja kuntien kasvuedellytyksiin. NewGRF:t ja peliskriptit voivat kuitenkin vaikuttaa tarkemmin pelin kulkuun @@ -4182,6 +4184,7 @@ STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Täysin STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Kuvakaappaus oletuslähennyksellä STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Koko kartan kuvakaappaus STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Korkeuskartan kuvakaappaus +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Pienoiskartan kuvakaappaus # AI Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Parametrit From 12380fc1bb952d5b8a368249082cd85291a78e82 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 5 Jan 2020 14:49:11 +0000 Subject: [PATCH 74/84] Fix: Assertion failure when post road-works cleanup removes all road pieces --- src/road_cmd.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index ace8edff7f..5a9efb8567 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1955,6 +1955,12 @@ static void TileLoop_Road(TileIndex tile) if (old_rb != new_rb) { RemoveRoad(tile, DC_EXEC | DC_AUTO | DC_NO_WATER, (old_rb ^ new_rb), RTT_ROAD, true); + + /* If new_rb is 0, there are now no road pieces left and the tile is no longer a road tile */ + if (new_rb == 0) { + MarkTileDirtyByTile(tile); + return; + } } } From cddb8a4605570666e076ab0e0f7b1f986f393e17 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Fri, 3 Jan 2020 12:14:06 +0000 Subject: [PATCH 75/84] Fix #7587: Crash when loading saves with waypoints with invalid locations --- src/saveload/waypoint_sl.cpp | 45 +++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/saveload/waypoint_sl.cpp b/src/saveload/waypoint_sl.cpp index c0570f81d3..0cba4b8d06 100644 --- a/src/saveload/waypoint_sl.cpp +++ b/src/saveload/waypoint_sl.cpp @@ -9,6 +9,7 @@ #include "../stdafx.h" #include "../waypoint_base.h" +#include "../debug.h" #include "../newgrf_station.h" #include "../vehicle_base.h" #include "../town.h" @@ -98,33 +99,45 @@ void MoveWaypointsToBaseStations() /* All saveload conversions have been done. Create the new waypoints! */ for (OldWaypoint &wp : _old_waypoints) { - Waypoint *new_wp = new Waypoint(wp.xy); + TileIndex t = wp.xy; + /* Sometimes waypoint (sign) locations became disconnected from their actual location in + * the map array. If this is the case, try to locate the actual location in the map array */ + if (!IsTileType(t, MP_RAILWAY) || GetRailTileType(t) != 2 /* RAIL_TILE_WAYPOINT */ || _m[t].m2 != wp.index) { + DEBUG(sl, 0, "Found waypoint tile %u with invalid position", t); + for (t = 0; t < MapSize(); t++) { + if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp.index) { + DEBUG(sl, 0, "Found actual waypoint position at %u", t); + break; + } + } + } + if (t == MapSize()) { + SlErrorCorrupt("Waypoint with invalid tile"); + } + + Waypoint *new_wp = new Waypoint(t); new_wp->town = wp.town; new_wp->town_cn = wp.town_cn; new_wp->name = wp.name; new_wp->delete_ctr = 0; // Just reset delete counter for once. new_wp->build_date = wp.build_date; new_wp->owner = wp.owner; + new_wp->string_id = STR_SV_STNAME_WAYPOINT; - new_wp->string_id = STR_SV_STNAME_WAYPOINT; + /* The tile might've been reserved! */ + bool reserved = !IsSavegameVersionBefore(SLV_100) && HasBit(_m[t].m5, 4); - TileIndex t = wp.xy; - if (IsTileType(t, MP_RAILWAY) && GetRailTileType(t) == 2 /* RAIL_TILE_WAYPOINT */ && _m[t].m2 == wp.index) { - /* The tile might've been reserved! */ - bool reserved = !IsSavegameVersionBefore(SLV_100) && HasBit(_m[t].m5, 4); + /* The tile really has our waypoint, so reassign the map array */ + MakeRailWaypoint(t, GetTileOwner(t), new_wp->index, (Axis)GB(_m[t].m5, 0, 1), 0, GetRailType(t)); + new_wp->facilities |= FACIL_TRAIN; + new_wp->owner = GetTileOwner(t); - /* The tile really has our waypoint, so reassign the map array */ - MakeRailWaypoint(t, GetTileOwner(t), new_wp->index, (Axis)GB(_m[t].m5, 0, 1), 0, GetRailType(t)); - new_wp->facilities |= FACIL_TRAIN; - new_wp->owner = GetTileOwner(t); + SetRailStationReservation(t, reserved); - SetRailStationReservation(t, reserved); - - if (wp.spec != nullptr) { - SetCustomStationSpecIndex(t, AllocateSpecToStation(wp.spec, new_wp, true)); - } - new_wp->rect.BeforeAddTile(t, StationRect::ADD_FORCE); + if (wp.spec != nullptr) { + SetCustomStationSpecIndex(t, AllocateSpecToStation(wp.spec, new_wp, true)); } + new_wp->rect.BeforeAddTile(t, StationRect::ADD_FORCE); wp.new_index = new_wp->index; } From d1cead7f251e09e572c73130bad601f7d991ecc6 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Fri, 3 Jan 2020 14:11:33 +0000 Subject: [PATCH 76/84] Fix: When loading old timetabled saves, also reset cached timetable duration --- src/order_base.h | 2 ++ src/order_cmd.cpp | 16 ++++++++++++++-- src/saveload/afterload.cpp | 10 ++++++++++ src/saveload/order_sl.cpp | 4 ---- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/order_base.h b/src/order_base.h index 347adbcee0..ba4959c0f3 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -281,6 +281,8 @@ public: void Initialize(Order *chain, Vehicle *v); + void RecalculateTimetableDuration(); + /** * Get the first order of the order chain. * @return the first order of the chain. diff --git a/src/order_cmd.cpp b/src/order_cmd.cpp index 67092bc775..1e9e8f2f3b 100644 --- a/src/order_cmd.cpp +++ b/src/order_cmd.cpp @@ -296,15 +296,15 @@ void OrderList::Initialize(Order *chain, Vehicle *v) this->num_manual_orders = 0; this->num_vehicles = 1; this->timetable_duration = 0; - this->total_duration = 0; for (Order *o = this->first; o != nullptr; o = o->next) { ++this->num_orders; if (!o->IsType(OT_IMPLICIT)) ++this->num_manual_orders; - this->timetable_duration += o->GetTimetabledWait() + o->GetTimetabledTravel(); this->total_duration += o->GetWaitTime() + o->GetTravelTime(); } + this->RecalculateTimetableDuration(); + for (Vehicle *u = this->first_shared->PreviousShared(); u != nullptr; u = u->PreviousShared()) { ++this->num_vehicles; this->first_shared = u; @@ -313,6 +313,18 @@ void OrderList::Initialize(Order *chain, Vehicle *v) for (const Vehicle *u = v->NextShared(); u != nullptr; u = u->NextShared()) ++this->num_vehicles; } +/** + * Recomputes Timetable duration. + * Split out into a separate function so it can be used by afterload. + */ +void OrderList::RecalculateTimetableDuration() +{ + this->timetable_duration = 0; + for (Order *o = this->first; o != nullptr; o = o->next) { + this->timetable_duration += o->GetTimetabledWait() + o->GetTimetabledTravel(); + } +} + /** * Free a complete order chain. * @param keep_orderlist If this is true only delete the orders, otherwise also delete the OrderList. diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 47d2c7b03c..c37c297c5f 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2963,6 +2963,16 @@ bool AfterLoadGame() } } + if (IsSavegameVersionBefore(SLV_190)) { + for (Order *order : Order::Iterate()) { + order->SetTravelTimetabled(order->GetTravelTime() > 0); + order->SetWaitTimetabled(order->GetWaitTime() > 0); + } + for (OrderList *orderlist : OrderList::Iterate()) { + orderlist->RecalculateTimetableDuration(); + } + } + /* * Only keep order-backups for network clients (and when replaying). * If we are a network server or not networking, then we just loaded a previously diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp index 0a9fa2a8cc..c8747d36bb 100644 --- a/src/saveload/order_sl.cpp +++ b/src/saveload/order_sl.cpp @@ -182,10 +182,6 @@ static void Load_ORDR() while ((index = SlIterateArray()) != -1) { Order *order = new (index) Order(); SlObject(order, GetOrderDescription()); - if (IsSavegameVersionBefore(SLV_190)) { - order->SetTravelTimetabled(order->GetTravelTime() > 0); - order->SetWaitTimetabled(order->GetWaitTime() > 0); - } } } } From ab9042145e429be254ae1ff8a486c98f9b850fe7 Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Tue, 31 Dec 2019 12:43:18 +0000 Subject: [PATCH 77/84] Fix #6667: Also recalculate bridge costs for 'spectated' AI companies --- src/tunnelbridge_cmd.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 00c362e776..9023ea2233 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -551,12 +551,12 @@ CommandCost CmdBuildBridge(TileIndex end_tile, DoCommandFlag flags, uint32 p1, u YapfNotifyTrackLayoutChange(tile_start, track); } - /* for human player that builds the bridge he gets a selection to choose from bridges (DC_QUERY_COST) - * It's unnecessary to execute this command every time for every bridge. So it is done only - * and cost is computed in "bridge_gui.c". For AI, Towns this has to be of course calculated - */ + /* Human players that build bridges get a selection to choose from (DC_QUERY_COST) + * It's unnecessary to execute this command every time for every bridge. + * So it is done only for humans and cost is computed in bridge_gui.cpp. + * For (non-spectated) AI, Towns this has to be of course calculated. */ Company *c = Company::GetIfValid(company); - if (!(flags & DC_QUERY_COST) || (c != nullptr && c->is_ai)) { + if (!(flags & DC_QUERY_COST) || (c != nullptr && c->is_ai && company != _local_company)) { bridge_len += 2; // begin and end tiles/ramps switch (transport_type) { From 70f9c3c655363bd8814f4a7d95e4dd94a85afd00 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Sat, 23 Nov 2019 20:14:44 +0100 Subject: [PATCH 78/84] Feature: Industry directory cargo filtering --- src/industry_gui.cpp | 204 ++++++++++++++++++++++++- src/lang/english.txt | 4 + src/script/api/game/game_window.hpp.sq | 2 + src/script/api/script_window.hpp | 2 + src/widgets/industry_widget.h | 10 +- 5 files changed, 210 insertions(+), 12 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 2461061ccd..d6a0d7aa43 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1167,6 +1167,8 @@ static const NWidgetPart _nested_industry_directory_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXTBTN, COLOUR_BROWN, WID_ID_DROPDOWN_ORDER), SetDataTip(STR_BUTTON_SORT_BY, STR_TOOLTIP_SORT_ORDER), NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_DROPDOWN_CRITERIA), SetDataTip(STR_JUST_STRING, STR_TOOLTIP_SORT_CRITERIA), + NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_FILTER_BY_ACC_CARGO), SetMinimalSize(225, 12), SetFill(0, 1), SetDataTip(STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER, STR_TOOLTIP_FILTER_CRITERIA), + NWidget(WWT_DROPDOWN, COLOUR_BROWN, WID_ID_FILTER_BY_PROD_CARGO), SetMinimalSize(225, 12), SetFill(0, 1), SetDataTip(STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER, STR_TOOLTIP_FILTER_CRITERIA), NWidget(WWT_PANEL, COLOUR_BROWN), SetResize(1, 0), EndContainer(), EndContainer(), NWidget(WWT_PANEL, COLOUR_BROWN, WID_ID_INDUSTRY_LIST), SetDataTip(0x0, STR_INDUSTRY_DIRECTORY_LIST_CAPTION), SetResize(1, 1), SetScrollbar(WID_ID_SCROLLBAR), EndContainer(), @@ -1178,7 +1180,68 @@ static const NWidgetPart _nested_industry_directory_widgets[] = { EndContainer(), }; -typedef GUIList GUIIndustryList; +typedef GUIList &> GUIIndustryList; + +/** Special cargo filter criteria */ +enum CargoFilterSpecialType { + CF_ANY = CT_NO_REFIT, ///< Show all industries (i.e. no filtering) + CF_NONE = CT_INVALID, ///< Show only industries which do not produce/accept cargo +}; + +/** Cargo filter functions */ +/** + * Check whether an industry accepts and produces a certain cargo pair. + * @param industry The industry whose cargoes will being checked. + * @param cargoes The accepted and produced cargo pair to look for. + * @return bool Whether the given cargoes accepted and produced by the industry. + */ +static bool CDECL CargoFilter(const Industry * const *industry, const std::pair &cargoes) +{ + auto accepted_cargo = cargoes.first; + auto produced_cargo = cargoes.second; + + bool accepted_cargo_matches; + + switch (accepted_cargo) { + case CF_ANY: + accepted_cargo_matches = true; + break; + + case CF_NONE: + accepted_cargo_matches = std::all_of(std::begin((*industry)->accepts_cargo), std::end((*industry)->accepts_cargo), [](CargoID cargo) { + return cargo == CT_INVALID; + }); + break; + + default: + const auto &ac = (*industry)->accepts_cargo; + accepted_cargo_matches = std::find(std::begin(ac), std::end(ac), accepted_cargo) != std::end(ac); + break; + } + + bool produced_cargo_matches; + + switch (produced_cargo) { + case CF_ANY: + produced_cargo_matches = true; + break; + + case CF_NONE: + produced_cargo_matches = std::all_of(std::begin((*industry)->produced_cargo), std::end((*industry)->produced_cargo), [](CargoID cargo) { + return cargo == CT_INVALID; + }); + break; + + default: + const auto &pc = (*industry)->produced_cargo; + produced_cargo_matches = std::find(std::begin(pc), std::end(pc), produced_cargo) != std::end(pc); + break; + } + + return accepted_cargo_matches && produced_cargo_matches; +} + +static GUIIndustryList::FilterFunction * const _filter_funcs[] = { &CargoFilter }; /** @@ -1197,6 +1260,82 @@ protected: GUIIndustryList industries; Scrollbar *vscroll; + CargoID cargo_filter[NUM_CARGO + 2]; ///< Available cargo filters; CargoID or CF_ANY or CF_NONE + StringID cargo_filter_texts[NUM_CARGO + 3]; ///< Texts for filter_cargo, terminated by INVALID_STRING_ID + CargoID produced_cargo_filter_criteria; ///< Selected produced cargo filter + CargoID accepted_cargo_filter_criteria; ///< Selected accepted cargo filter + + /** + * Set cargo filter list item index. + * @param index The index of the cargo to be set + */ + void SetProducedCargoFilterIndex(int index) + { + if (this->produced_cargo_filter_criteria != index) { + this->produced_cargo_filter_criteria = index; + /* deactivate filter if criteria is 'Show All', activate it otherwise */ + bool is_filtering_necessary = this->cargo_filter[this->produced_cargo_filter_criteria] != CF_ANY || this->cargo_filter[this->accepted_cargo_filter_criteria] != CF_ANY; + + this->industries.SetFilterState(is_filtering_necessary); + this->industries.SetFilterType(0); + this->industries.ForceRebuild(); + } + } + + /** + * Set cargo filter list item index. + * @param index The index of the cargo to be set + */ + void SetAcceptedCargoFilterIndex(int index) + { + if (this->accepted_cargo_filter_criteria != index) { + this->accepted_cargo_filter_criteria = index; + /* deactivate filter if criteria is 'Show All', activate it otherwise */ + bool is_filtering_necessary = this->cargo_filter[this->produced_cargo_filter_criteria] != CF_ANY || this->cargo_filter[this->accepted_cargo_filter_criteria] != CF_ANY; + + this->industries.SetFilterState(is_filtering_necessary); + this->industries.SetFilterType(0); + this->industries.ForceRebuild(); + } + } + + /** + * Populate the filter list and set the cargo filter criteria. + */ + void SetCargoFilterArray() + { + uint filter_items = 0; + + /* Add item for disabling filtering. */ + this->cargo_filter[filter_items] = CF_ANY; + this->cargo_filter_texts[filter_items] = STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES; + this->produced_cargo_filter_criteria = filter_items; + this->accepted_cargo_filter_criteria = filter_items; + filter_items++; + + /* Add item for industries not producing anything, e.g. power plants */ + this->cargo_filter[filter_items] = CF_NONE; + this->cargo_filter_texts[filter_items] = STR_INDUSTRY_DIRECTORY_FILTER_NONE; + filter_items++; + + /* Collect available cargo types for filtering. */ + const CargoSpec *cs; + FOR_ALL_SORTED_STANDARD_CARGOSPECS(cs) { + this->cargo_filter[filter_items] = cs->Index(); + this->cargo_filter_texts[filter_items] = cs->name; + filter_items++; + } + + /* Terminate the filter list. */ + this->cargo_filter_texts[filter_items] = INVALID_STRING_ID; + + this->industries.SetFilterFuncs(_filter_funcs); + + bool is_filtering_necessary = this->cargo_filter[this->produced_cargo_filter_criteria] != CF_ANY || this->cargo_filter[this->accepted_cargo_filter_criteria] != CF_ANY; + + this->industries.SetFilterState(is_filtering_necessary); + } + /** (Re)Build industries list */ void BuildSortIndustriesList() { @@ -1209,12 +1348,19 @@ protected: this->industries.shrink_to_fit(); this->industries.RebuildDone(); - this->vscroll->SetCount((uint)this->industries.size()); // Update scrollbar as well. } - if (!this->industries.Sort()) return; IndustryDirectoryWindow::last_industry = nullptr; // Reset name sorter sort cache - this->SetWidgetDirty(WID_ID_INDUSTRY_LIST); // Set the modified widget dirty + + auto filter = std::make_pair(this->cargo_filter[this->accepted_cargo_filter_criteria], + this->cargo_filter[this->produced_cargo_filter_criteria]); + + this->industries.Filter(filter); + this->industries.Sort(); + + this->vscroll->SetCount((uint)this->industries.size()); // Update scrollbar as well. + + this->SetDirty(); } /** @@ -1371,9 +1517,26 @@ public: this->last_sorting = this->industries.GetListing(); } + void OnInit() override + { + this->SetCargoFilterArray(); + } + void SetStringParameters(int widget) const override { - if (widget == WID_ID_DROPDOWN_CRITERIA) SetDParam(0, IndustryDirectoryWindow::sorter_names[this->industries.SortType()]); + switch (widget) { + case WID_ID_DROPDOWN_CRITERIA: + SetDParam(0, IndustryDirectoryWindow::sorter_names[this->industries.SortType()]); + break; + + case WID_ID_FILTER_BY_ACC_CARGO: + SetDParam(0, this->cargo_filter_texts[this->accepted_cargo_filter_criteria]); + break; + + case WID_ID_FILTER_BY_PROD_CARGO: + SetDParam(0, this->cargo_filter_texts[this->produced_cargo_filter_criteria]); + break; + } } void DrawWidget(const Rect &r, int widget) const override @@ -1451,6 +1614,14 @@ public: ShowDropDownMenu(this, IndustryDirectoryWindow::sorter_names, this->industries.SortType(), WID_ID_DROPDOWN_CRITERIA, 0, 0); break; + case WID_ID_FILTER_BY_ACC_CARGO: // Cargo filter dropdown + ShowDropDownMenu(this, this->cargo_filter_texts, this->accepted_cargo_filter_criteria, WID_ID_FILTER_BY_ACC_CARGO, 0, 0); + break; + + case WID_ID_FILTER_BY_PROD_CARGO: // Cargo filter dropdown + ShowDropDownMenu(this, this->cargo_filter_texts, this->produced_cargo_filter_criteria, WID_ID_FILTER_BY_PROD_CARGO, 0, 0); + break; + case WID_ID_INDUSTRY_LIST: { uint p = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_ID_INDUSTRY_LIST, WD_FRAMERECT_TOP); if (p < this->industries.size()) { @@ -1467,9 +1638,26 @@ public: void OnDropdownSelect(int widget, int index) override { - if (this->industries.SortType() != index) { - this->industries.SetSortType(index); - this->BuildSortIndustriesList(); + switch (widget) { + case WID_ID_DROPDOWN_CRITERIA: { + if (this->industries.SortType() != index) { + this->industries.SetSortType(index); + this->BuildSortIndustriesList(); + } + break; + } + + case WID_ID_FILTER_BY_ACC_CARGO: { + this->SetAcceptedCargoFilterIndex(index); + this->BuildSortIndustriesList(); + break; + } + + case WID_ID_FILTER_BY_PROD_CARGO: { + this->SetProducedCargoFilterIndex(index); + this->BuildSortIndustriesList(); + break; + } } } diff --git a/src/lang/english.txt b/src/lang/english.txt index d0fa352bdf..94b84d2c3b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3404,6 +3404,10 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING4}, {STRING4}, {STRING4} STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING4}, {STRING4}, {STRING4} and {NUM} more... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Industry names - click on name to centre main view on industry. Ctrl+Click opens a new viewport on industry location +STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Accepted cargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Produced cargo: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :All cargo types +STR_INDUSTRY_DIRECTORY_FILTER_NONE :None # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} diff --git a/src/script/api/game/game_window.hpp.sq b/src/script/api/game/game_window.hpp.sq index adc790ad9e..eb6328da05 100644 --- a/src/script/api/game/game_window.hpp.sq +++ b/src/script/api/game/game_window.hpp.sq @@ -589,6 +589,8 @@ void SQGSWindow_Register(Squirrel *engine) SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IV_DISPLAY, "WID_IV_DISPLAY"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ID_DROPDOWN_ORDER, "WID_ID_DROPDOWN_ORDER"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ID_DROPDOWN_CRITERIA, "WID_ID_DROPDOWN_CRITERIA"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ID_FILTER_BY_ACC_CARGO, "WID_ID_FILTER_BY_ACC_CARGO"); + SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ID_FILTER_BY_PROD_CARGO, "WID_ID_FILTER_BY_PROD_CARGO"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ID_INDUSTRY_LIST, "WID_ID_INDUSTRY_LIST"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_ID_SCROLLBAR, "WID_ID_SCROLLBAR"); SQGSWindow.DefSQConst(engine, ScriptWindow::WID_IC_CAPTION, "WID_IC_CAPTION"); diff --git a/src/script/api/script_window.hpp b/src/script/api/script_window.hpp index 2b040c8c65..69d6b81f9b 100644 --- a/src/script/api/script_window.hpp +++ b/src/script/api/script_window.hpp @@ -1523,6 +1523,8 @@ public: enum IndustryDirectoryWidgets { WID_ID_DROPDOWN_ORDER = ::WID_ID_DROPDOWN_ORDER, ///< Dropdown for the order of the sort. WID_ID_DROPDOWN_CRITERIA = ::WID_ID_DROPDOWN_CRITERIA, ///< Dropdown for the criteria of the sort. + WID_ID_FILTER_BY_ACC_CARGO = ::WID_ID_FILTER_BY_ACC_CARGO, ///< Accepted cargo filter dropdown list. + WID_ID_FILTER_BY_PROD_CARGO = ::WID_ID_FILTER_BY_PROD_CARGO, ///< Produced cargo filter dropdown list. WID_ID_INDUSTRY_LIST = ::WID_ID_INDUSTRY_LIST, ///< Industry list. WID_ID_SCROLLBAR = ::WID_ID_SCROLLBAR, ///< Scrollbar of the list. }; diff --git a/src/widgets/industry_widget.h b/src/widgets/industry_widget.h index d31de978ef..e9fb2b1148 100644 --- a/src/widgets/industry_widget.h +++ b/src/widgets/industry_widget.h @@ -30,10 +30,12 @@ enum IndustryViewWidgets { /** Widgets of the #IndustryDirectoryWindow class. */ enum IndustryDirectoryWidgets { - WID_ID_DROPDOWN_ORDER, ///< Dropdown for the order of the sort. - WID_ID_DROPDOWN_CRITERIA, ///< Dropdown for the criteria of the sort. - WID_ID_INDUSTRY_LIST, ///< Industry list. - WID_ID_SCROLLBAR, ///< Scrollbar of the list. + WID_ID_DROPDOWN_ORDER, ///< Dropdown for the order of the sort. + WID_ID_DROPDOWN_CRITERIA, ///< Dropdown for the criteria of the sort. + WID_ID_FILTER_BY_ACC_CARGO, ///< Accepted cargo filter dropdown list. + WID_ID_FILTER_BY_PROD_CARGO, ///< Produced cargo filter dropdown list. + WID_ID_INDUSTRY_LIST, ///< Industry list. + WID_ID_SCROLLBAR, ///< Scrollbar of the list. }; /** Widgets of the #IndustryCargoesWindow class */ From 808253c29c5b0f855a1d4cb230783cc2adb1451d Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Sat, 23 Nov 2019 21:52:33 +0100 Subject: [PATCH 79/84] Change: Move the filtered cargo to the first place in the industry directory window's cargo lists --- src/industry_gui.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index d6a0d7aa43..c93dc5573a 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1475,6 +1475,18 @@ protected: return std::get<3>(a) > std::get<3>(b); }); + /* If the produced cargo filter is active then move the filtered cargo to the beginning of the list, + * because this is the one the player interested in, and that way it is not hidden in the 'n' more cargos */ + const CargoID cid = this->cargo_filter[this->produced_cargo_filter_criteria]; + if (cid != CF_ANY && cid != CF_NONE) { + auto filtered_ci = std::find_if(cargos.begin(), cargos.end(), [cid](const CargoInfo& ci) -> bool { + return std::get<0>(ci) == cid; + }); + if (filtered_ci != cargos.end()) { + std::rotate(cargos.begin(), filtered_ci, filtered_ci + 1); + } + } + /* Display first 3 cargos */ for (size_t j = 0; j < min(3, cargos.size()); j++) { CargoInfo ci = cargos[j]; From 596fb5d54a27cb0e6ca51c2ddbed68a2c34e9426 Mon Sep 17 00:00:00 2001 From: stormcone <48624099+stormcone@users.noreply.github.com> Date: Mon, 23 Dec 2019 21:11:01 +0100 Subject: [PATCH 80/84] Change: In the industry directory window an industry will be greyed out if it temporarily does not accept the cargo selected by the acceptance cargo filter. --- src/industry_gui.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index c93dc5573a..6be98e2804 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -1565,8 +1565,17 @@ public: DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, STR_INDUSTRY_DIRECTORY_NONE); break; } + TextColour tc; + const CargoID acf_cid = this->cargo_filter[this->accepted_cargo_filter_criteria]; for (uint i = this->vscroll->GetPosition(); i < this->industries.size(); i++) { - DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, this->GetIndustryString(this->industries[i])); + tc = TC_FROMSTRING; + if (acf_cid != CF_ANY && acf_cid != CF_NONE) { + Industry *ind = const_cast(this->industries[i]); + if (IndustryTemporarilyRefusesCargo(ind, acf_cid)) { + tc = TC_GREY | TC_FORCED; + } + } + DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, this->GetIndustryString(this->industries[i]), tc); y += this->resize.step_height; if (++n == this->vscroll->GetCapacity()) break; // max number of industries in 1 window From 838117b05ec5ca6e111b86fb9c1210c755e42201 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 4 Jan 2020 22:43:37 +0100 Subject: [PATCH 81/84] Doc: Missing member description --- src/fios_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 7b13aa1db1..de66d6b890 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -269,7 +269,7 @@ private: AbstractFileType abstract_filetype; /// Type of file to select. SaveLoadOperation fop; ///< File operation to perform. FileList fios_items; ///< Save game list. - FiosItem o_dir; + FiosItem o_dir; ///< Original dir (home dir for this browser) const FiosItem *selected; ///< Selected game in #fios_items, or \c nullptr. Scrollbar *vscroll; From ac3bc30a30d3daeb912c989accbb0fb08ea6e582 Mon Sep 17 00:00:00 2001 From: Niels Martin Hansen Date: Sat, 4 Jan 2020 23:06:49 +0100 Subject: [PATCH 82/84] Add: Highlight item under mouse in file browser --- src/fios_gui.cpp | 30 ++++++++++++++++++++++++++++++ src/gfx_func.h | 1 + 2 files changed, 31 insertions(+) diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index de66d6b890..9f8b45413f 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -271,6 +271,7 @@ private: FileList fios_items; ///< Save game list. FiosItem o_dir; ///< Original dir (home dir for this browser) const FiosItem *selected; ///< Selected game in #fios_items, or \c nullptr. + const FiosItem *highlighted; ///< Item in fios_items highlighted by mouse pointer, or \c nullptr. Scrollbar *vscroll; StringFilter string_filter; ///< Filter for available games. @@ -445,6 +446,8 @@ public: if (item == this->selected) { GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_DARK_BLUE); + } else if (item == this->highlighted) { + GfxFillRect(r.left + 1, y, r.right, y + this->resize.step_height, PC_VERY_DARK_BLUE); } DrawString(r.left + WD_FRAMERECT_LEFT, r.right - WD_FRAMERECT_RIGHT, y, item->title, _fios_colours[GetDetailedFileType(item->type)]); y += this->resize.step_height; @@ -714,6 +717,33 @@ public: } } + void OnMouseLoop() override + { + const Point pt{ _cursor.pos.x - this->left, _cursor.pos.y - this->top }; + const int widget = GetWidgetFromPos(this, pt.x, pt.y); + + if (widget == WID_SL_DRIVES_DIRECTORIES_LIST) { + int y = this->vscroll->GetScrolledRowFromWidget(pt.y, this, WID_SL_DRIVES_DIRECTORIES_LIST, WD_FRAMERECT_TOP); + if (y == INT_MAX) return; + + /* Get the corresponding non-filtered out item from the list */ + int i = 0; + while (i <= y) { + if (!this->fios_items_shown[i]) y++; + i++; + } + const FiosItem *file = this->fios_items.Get(y); + + if (file != this->highlighted) { + this->highlighted = file; + this->SetWidgetDirty(WID_SL_DRIVES_DIRECTORIES_LIST); + } + } else if (this->highlighted != nullptr) { + this->highlighted = nullptr; + this->SetWidgetDirty(WID_SL_DRIVES_DIRECTORIES_LIST); + } + } + EventState OnKeyPress(WChar key, uint16 keycode) override { if (keycode == WKC_ESC) { diff --git a/src/gfx_func.h b/src/gfx_func.h index a0b46a477b..ea133acfc1 100644 --- a/src/gfx_func.h +++ b/src/gfx_func.h @@ -219,6 +219,7 @@ static const uint8 PC_VERY_LIGHT_YELLOW = 0x45; ///< Almost-white yel static const uint8 PC_GREEN = 0xD0; ///< Green palette colour. +static const uint8 PC_VERY_DARK_BLUE = 0x9A; ///< Almost-black blue palette colour. static const uint8 PC_DARK_BLUE = 0x9D; ///< Dark blue palette colour. static const uint8 PC_LIGHT_BLUE = 0x98; ///< Light blue palette colour. From 39e6247bec6b958b11c6ab58430a4197eb1deb6a Mon Sep 17 00:00:00 2001 From: glx Date: Sun, 5 Jan 2020 22:55:57 +0100 Subject: [PATCH 83/84] Fix #7899, 196d5868: don't trigger filter changes more than expected --- src/town.h | 1 + src/town_cmd.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/town.h b/src/town.h index c8903d4ff3..1f04cf1552 100644 --- a/src/town.h +++ b/src/town.h @@ -162,6 +162,7 @@ enum TownRatingCheckType { enum TownDirectoryInvalidateWindowData { TDIWD_FORCE_REBUILD, TDIWD_FILTER_CHANGES, ///< The filename filter has changed (via the editbox) + TDIWD_FORCE_RESORT, }; /** diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 31e11ae45f..9949775136 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -153,7 +153,7 @@ Town::~Town() */ void Town::PostDestructor(size_t index) { - InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 0); + InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_REBUILD); UpdateNearestTownForRoadTiles(false); /* Give objects a new home! */ @@ -423,7 +423,7 @@ static void ChangePopulation(Town *t, int mod) InvalidateWindowData(WC_TOWN_VIEW, t->index); // Cargo requirements may appear/vanish for small populations if (_settings_client.gui.population_in_label) t->UpdateVirtCoord(); - InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1); + InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_RESORT); } /** @@ -1777,7 +1777,7 @@ static void DoCreateTown(Town *t, TileIndex tile, uint32 townnameparts, TownSize t->townnameparts = townnameparts; t->UpdateVirtCoord(); - InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 0); + InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_REBUILD); t->InitializeLayout(layout); @@ -2685,7 +2685,7 @@ CommandCost CmdRenameTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 t->name = reset ? nullptr : stredup(text); t->UpdateVirtCoord(); - InvalidateWindowData(WC_TOWN_DIRECTORY, 0, 1); + InvalidateWindowData(WC_TOWN_DIRECTORY, 0, TDIWD_FORCE_RESORT); UpdateAllStationVirtCoords(); } return CommandCost(); From 5b52f25902dad09e2f237ce798e9873a4ac42f4f Mon Sep 17 00:00:00 2001 From: Charles Pigott Date: Sun, 5 Jan 2020 23:05:28 +0000 Subject: [PATCH 84/84] Fix e558aa8: Compiler warning about unused value (and move some variable declarations to where they're used) --- src/screenshot.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 4a80a0cbfe..17efa9130c 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -893,12 +893,8 @@ static Owner GetMinimapOwner(TileIndex tile) static void MinimapScreenCallback(void *userdata, void *buf, uint y, uint pitch, uint n) { - uint32 *ubuf; - uint num, row, col; - byte val; - byte owner_colours[OWNER_END + 1]; - /* Fill with the company colours */ + byte owner_colours[OWNER_END + 1]; for (const Company *c : Company::Iterate()) { owner_colours[c->index] = MKCOLOUR(_colour_gradient[c->colour][5]); } @@ -910,15 +906,15 @@ static void MinimapScreenCallback(void *userdata, void *buf, uint y, uint pitch, owner_colours[OWNER_DEITY] = PC_DARK_GREY; // industry owner_colours[OWNER_END] = PC_BLACK; - ubuf = (uint32 *)buf; - num = (pitch * n); + uint32 *ubuf = (uint32 *)buf; + uint num = (pitch * n); for (uint i = 0; i < num; i++) { - row = y + (int)(i / pitch); - col = (MapSizeX() - 1) - (i % pitch); + uint row = y + (int)(i / pitch); + uint col = (MapSizeX() - 1) - (i % pitch); TileIndex tile = TileXY(col, row); Owner o = GetMinimapOwner(tile); - val = owner_colours[o]; + byte val = owner_colours[o]; uint32 colour_buf = 0; colour_buf = (_cur_palette.palette[val].b << 0); @@ -926,7 +922,7 @@ static void MinimapScreenCallback(void *userdata, void *buf, uint y, uint pitch, colour_buf |= (_cur_palette.palette[val].r << 16); *ubuf = colour_buf; - *ubuf++; // Skip alpha + ubuf++; // Skip alpha } }